From cb65a2e531ad553a0e875b55e2bb94d4ae126652 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Wed, 5 Feb 2025 16:03:33 +0200 Subject: [PATCH 01/45] chore --- dist/typesense.js | 10702 ---------------- dist/typesense.js.map | 1 - dist/typesense.min.js | 3 - dist/typesense.min.js.LICENSE.txt | 1 - dist/typesense.min.js.map | 1 - lib/Typesense.d.ts | 10 - lib/Typesense.js | 12 - lib/Typesense.js.map | 1 - lib/Typesense/Alias.d.ts | 10 - lib/Typesense/Alias.js | 30 - lib/Typesense/Alias.js.map | 1 - lib/Typesense/Aliases.d.ts | 18 - lib/Typesense/Aliases.js | 36 - lib/Typesense/Aliases.js.map | 1 - lib/Typesense/Analytics.d.ts | 15 - lib/Typesense/Analytics.js | 40 - lib/Typesense/Analytics.js.map | 1 - lib/Typesense/AnalyticsEvent.d.ts | 5 - lib/Typesense/AnalyticsEvent.js | 3 - lib/Typesense/AnalyticsEvent.js.map | 1 - lib/Typesense/AnalyticsEvents.d.ts | 9 - lib/Typesense/AnalyticsEvents.js | 30 - lib/Typesense/AnalyticsEvents.js.map | 1 - lib/Typesense/AnalyticsRule.d.ts | 35 - lib/Typesense/AnalyticsRule.js | 30 - lib/Typesense/AnalyticsRule.js.map | 1 - lib/Typesense/AnalyticsRules.d.ts | 13 - lib/Typesense/AnalyticsRules.js | 37 - lib/Typesense/AnalyticsRules.js.map | 1 - lib/Typesense/ApiCall.d.ts | 49 - lib/Typesense/ApiCall.js | 406 - lib/Typesense/ApiCall.js.map | 1 - lib/Typesense/Client.d.ts | 57 - lib/Typesense/Client.js | 121 - lib/Typesense/Client.js.map | 1 - lib/Typesense/Collection.d.ts | 62 - lib/Typesense/Collection.js | 109 - lib/Typesense/Collection.js.map | 1 - lib/Typesense/Collections.d.ts | 27 - lib/Typesense/Collections.js | 35 - lib/Typesense/Collections.js.map | 1 - lib/Typesense/Configuration.d.ts | 115 - lib/Typesense/Configuration.js | 113 - lib/Typesense/Configuration.js.map | 1 - lib/Typesense/Conversation.d.ts | 22 - lib/Typesense/Conversation.js | 37 - lib/Typesense/Conversation.js.map | 1 - lib/Typesense/ConversationModel.d.ts | 24 - lib/Typesense/ConversationModel.js | 37 - lib/Typesense/ConversationModel.js.map | 1 - lib/Typesense/ConversationModels.d.ts | 10 - lib/Typesense/ConversationModels.js | 37 - lib/Typesense/ConversationModels.js.map | 1 - lib/Typesense/Conversations.d.ts | 17 - lib/Typesense/Conversations.js | 42 - lib/Typesense/Conversations.js.map | 1 - lib/Typesense/Debug.d.ts | 10 - lib/Typesense/Debug.js | 19 - lib/Typesense/Debug.js.map | 1 - lib/Typesense/Document.d.ts | 12 - lib/Typesense/Document.js | 41 - lib/Typesense/Document.js.map | 1 - lib/Typesense/Documents.d.ts | 256 - lib/Typesense/Documents.js | 210 - lib/Typesense/Documents.js.map | 1 - lib/Typesense/Errors/HTTPError.d.ts | 3 - lib/Typesense/Errors/HTTPError.js | 13 - lib/Typesense/Errors/HTTPError.js.map | 1 - lib/Typesense/Errors/ImportError.d.ts | 15 - lib/Typesense/Errors/ImportError.js | 16 - lib/Typesense/Errors/ImportError.js.map | 1 - .../Errors/MissingConfigurationError.d.ts | 3 - .../Errors/MissingConfigurationError.js | 13 - .../Errors/MissingConfigurationError.js.map | 1 - lib/Typesense/Errors/ObjectAlreadyExists.d.ts | 3 - lib/Typesense/Errors/ObjectAlreadyExists.js | 13 - .../Errors/ObjectAlreadyExists.js.map | 1 - lib/Typesense/Errors/ObjectNotFound.d.ts | 3 - lib/Typesense/Errors/ObjectNotFound.js | 13 - lib/Typesense/Errors/ObjectNotFound.js.map | 1 - lib/Typesense/Errors/ObjectUnprocessable.d.ts | 3 - lib/Typesense/Errors/ObjectUnprocessable.js | 13 - .../Errors/ObjectUnprocessable.js.map | 1 - lib/Typesense/Errors/RequestMalformed.d.ts | 3 - lib/Typesense/Errors/RequestMalformed.js | 13 - lib/Typesense/Errors/RequestMalformed.js.map | 1 - lib/Typesense/Errors/RequestUnauthorized.d.ts | 3 - lib/Typesense/Errors/RequestUnauthorized.js | 13 - .../Errors/RequestUnauthorized.js.map | 1 - lib/Typesense/Errors/ServerError.d.ts | 3 - lib/Typesense/Errors/ServerError.js | 13 - lib/Typesense/Errors/ServerError.js.map | 1 - lib/Typesense/Errors/TypesenseError.d.ts | 5 - lib/Typesense/Errors/TypesenseError.js | 19 - lib/Typesense/Errors/TypesenseError.js.map | 1 - lib/Typesense/Errors/index.d.ts | 11 - lib/Typesense/Errors/index.js | 25 - lib/Typesense/Errors/index.js.map | 1 - lib/Typesense/Health.d.ts | 9 - lib/Typesense/Health.js | 19 - lib/Typesense/Health.js.map | 1 - lib/Typesense/Key.d.ts | 24 - lib/Typesense/Key.js | 30 - lib/Typesense/Key.js.map | 1 - lib/Typesense/Keys.d.ts | 19 - lib/Typesense/Keys.js | 46 - lib/Typesense/Keys.js.map | 1 - lib/Typesense/Metrics.d.ts | 25 - lib/Typesense/Metrics.js | 19 - lib/Typesense/Metrics.js.map | 1 - lib/Typesense/MultiSearch.d.ts | 32 - lib/Typesense/MultiSearch.js | 50 - lib/Typesense/MultiSearch.js.map | 1 - lib/Typesense/Operations.d.ts | 6 - lib/Typesense/Operations.js | 22 - lib/Typesense/Operations.js.map | 1 - lib/Typesense/Override.d.ts | 17 - lib/Typesense/Override.js | 32 - lib/Typesense/Override.js.map | 1 - lib/Typesense/Overrides.d.ts | 43 - lib/Typesense/Overrides.js | 38 - lib/Typesense/Overrides.js.map | 1 - lib/Typesense/Preset.d.ts | 16 - lib/Typesense/Preset.js | 30 - lib/Typesense/Preset.js.map | 1 - lib/Typesense/Presets.d.ts | 18 - lib/Typesense/Presets.js | 49 - lib/Typesense/Presets.js.map | 1 - lib/Typesense/RequestWithCache.d.ts | 11 - lib/Typesense/RequestWithCache.js | 88 - lib/Typesense/RequestWithCache.js.map | 1 - lib/Typesense/SearchClient.d.ts | 13 - lib/Typesense/SearchClient.js | 45 - lib/Typesense/SearchClient.js.map | 1 - lib/Typesense/SearchOnlyCollection.d.ts | 10 - lib/Typesense/SearchOnlyCollection.js | 18 - lib/Typesense/SearchOnlyCollection.js.map | 1 - lib/Typesense/SearchOnlyDocuments.d.ts | 15 - lib/Typesense/SearchOnlyDocuments.js | 50 - lib/Typesense/SearchOnlyDocuments.js.map | 1 - lib/Typesense/Stats.d.ts | 24 - lib/Typesense/Stats.js | 19 - lib/Typesense/Stats.js.map | 1 - lib/Typesense/Stopword.d.ts | 18 - lib/Typesense/Stopword.js | 30 - lib/Typesense/Stopword.js.map | 1 - lib/Typesense/Stopwords.d.ts | 17 - lib/Typesense/Stopwords.js | 36 - lib/Typesense/Stopwords.js.map | 1 - lib/Typesense/Synonym.d.ts | 17 - lib/Typesense/Synonym.js | 32 - lib/Typesense/Synonym.js.map | 1 - lib/Typesense/Synonyms.d.ts | 20 - lib/Typesense/Synonyms.js | 38 - lib/Typesense/Synonyms.js.map | 1 - lib/Typesense/Utils.d.ts | 6 - lib/Typesense/Utils.js | 30 - lib/Typesense/Utils.js.map | 1 - 158 files changed, 14260 deletions(-) delete mode 100644 dist/typesense.js delete mode 100644 dist/typesense.js.map delete mode 100644 dist/typesense.min.js delete mode 100644 dist/typesense.min.js.LICENSE.txt delete mode 100644 dist/typesense.min.js.map delete mode 100644 lib/Typesense.d.ts delete mode 100644 lib/Typesense.js delete mode 100644 lib/Typesense.js.map delete mode 100644 lib/Typesense/Alias.d.ts delete mode 100644 lib/Typesense/Alias.js delete mode 100644 lib/Typesense/Alias.js.map delete mode 100644 lib/Typesense/Aliases.d.ts delete mode 100644 lib/Typesense/Aliases.js delete mode 100644 lib/Typesense/Aliases.js.map delete mode 100644 lib/Typesense/Analytics.d.ts delete mode 100644 lib/Typesense/Analytics.js delete mode 100644 lib/Typesense/Analytics.js.map delete mode 100644 lib/Typesense/AnalyticsEvent.d.ts delete mode 100644 lib/Typesense/AnalyticsEvent.js delete mode 100644 lib/Typesense/AnalyticsEvent.js.map delete mode 100644 lib/Typesense/AnalyticsEvents.d.ts delete mode 100644 lib/Typesense/AnalyticsEvents.js delete mode 100644 lib/Typesense/AnalyticsEvents.js.map delete mode 100644 lib/Typesense/AnalyticsRule.d.ts delete mode 100644 lib/Typesense/AnalyticsRule.js delete mode 100644 lib/Typesense/AnalyticsRule.js.map delete mode 100644 lib/Typesense/AnalyticsRules.d.ts delete mode 100644 lib/Typesense/AnalyticsRules.js delete mode 100644 lib/Typesense/AnalyticsRules.js.map delete mode 100644 lib/Typesense/ApiCall.d.ts delete mode 100644 lib/Typesense/ApiCall.js delete mode 100644 lib/Typesense/ApiCall.js.map delete mode 100644 lib/Typesense/Client.d.ts delete mode 100644 lib/Typesense/Client.js delete mode 100644 lib/Typesense/Client.js.map delete mode 100644 lib/Typesense/Collection.d.ts delete mode 100644 lib/Typesense/Collection.js delete mode 100644 lib/Typesense/Collection.js.map delete mode 100644 lib/Typesense/Collections.d.ts delete mode 100644 lib/Typesense/Collections.js delete mode 100644 lib/Typesense/Collections.js.map delete mode 100644 lib/Typesense/Configuration.d.ts delete mode 100644 lib/Typesense/Configuration.js delete mode 100644 lib/Typesense/Configuration.js.map delete mode 100644 lib/Typesense/Conversation.d.ts delete mode 100644 lib/Typesense/Conversation.js delete mode 100644 lib/Typesense/Conversation.js.map delete mode 100644 lib/Typesense/ConversationModel.d.ts delete mode 100644 lib/Typesense/ConversationModel.js delete mode 100644 lib/Typesense/ConversationModel.js.map delete mode 100644 lib/Typesense/ConversationModels.d.ts delete mode 100644 lib/Typesense/ConversationModels.js delete mode 100644 lib/Typesense/ConversationModels.js.map delete mode 100644 lib/Typesense/Conversations.d.ts delete mode 100644 lib/Typesense/Conversations.js delete mode 100644 lib/Typesense/Conversations.js.map delete mode 100644 lib/Typesense/Debug.d.ts delete mode 100644 lib/Typesense/Debug.js delete mode 100644 lib/Typesense/Debug.js.map delete mode 100644 lib/Typesense/Document.d.ts delete mode 100644 lib/Typesense/Document.js delete mode 100644 lib/Typesense/Document.js.map delete mode 100644 lib/Typesense/Documents.d.ts delete mode 100644 lib/Typesense/Documents.js delete mode 100644 lib/Typesense/Documents.js.map delete mode 100644 lib/Typesense/Errors/HTTPError.d.ts delete mode 100644 lib/Typesense/Errors/HTTPError.js delete mode 100644 lib/Typesense/Errors/HTTPError.js.map delete mode 100644 lib/Typesense/Errors/ImportError.d.ts delete mode 100644 lib/Typesense/Errors/ImportError.js delete mode 100644 lib/Typesense/Errors/ImportError.js.map delete mode 100644 lib/Typesense/Errors/MissingConfigurationError.d.ts delete mode 100644 lib/Typesense/Errors/MissingConfigurationError.js delete mode 100644 lib/Typesense/Errors/MissingConfigurationError.js.map delete mode 100644 lib/Typesense/Errors/ObjectAlreadyExists.d.ts delete mode 100644 lib/Typesense/Errors/ObjectAlreadyExists.js delete mode 100644 lib/Typesense/Errors/ObjectAlreadyExists.js.map delete mode 100644 lib/Typesense/Errors/ObjectNotFound.d.ts delete mode 100644 lib/Typesense/Errors/ObjectNotFound.js delete mode 100644 lib/Typesense/Errors/ObjectNotFound.js.map delete mode 100644 lib/Typesense/Errors/ObjectUnprocessable.d.ts delete mode 100644 lib/Typesense/Errors/ObjectUnprocessable.js delete mode 100644 lib/Typesense/Errors/ObjectUnprocessable.js.map delete mode 100644 lib/Typesense/Errors/RequestMalformed.d.ts delete mode 100644 lib/Typesense/Errors/RequestMalformed.js delete mode 100644 lib/Typesense/Errors/RequestMalformed.js.map delete mode 100644 lib/Typesense/Errors/RequestUnauthorized.d.ts delete mode 100644 lib/Typesense/Errors/RequestUnauthorized.js delete mode 100644 lib/Typesense/Errors/RequestUnauthorized.js.map delete mode 100644 lib/Typesense/Errors/ServerError.d.ts delete mode 100644 lib/Typesense/Errors/ServerError.js delete mode 100644 lib/Typesense/Errors/ServerError.js.map delete mode 100644 lib/Typesense/Errors/TypesenseError.d.ts delete mode 100644 lib/Typesense/Errors/TypesenseError.js delete mode 100644 lib/Typesense/Errors/TypesenseError.js.map delete mode 100644 lib/Typesense/Errors/index.d.ts delete mode 100644 lib/Typesense/Errors/index.js delete mode 100644 lib/Typesense/Errors/index.js.map delete mode 100644 lib/Typesense/Health.d.ts delete mode 100644 lib/Typesense/Health.js delete mode 100644 lib/Typesense/Health.js.map delete mode 100644 lib/Typesense/Key.d.ts delete mode 100644 lib/Typesense/Key.js delete mode 100644 lib/Typesense/Key.js.map delete mode 100644 lib/Typesense/Keys.d.ts delete mode 100644 lib/Typesense/Keys.js delete mode 100644 lib/Typesense/Keys.js.map delete mode 100644 lib/Typesense/Metrics.d.ts delete mode 100644 lib/Typesense/Metrics.js delete mode 100644 lib/Typesense/Metrics.js.map delete mode 100644 lib/Typesense/MultiSearch.d.ts delete mode 100644 lib/Typesense/MultiSearch.js delete mode 100644 lib/Typesense/MultiSearch.js.map delete mode 100644 lib/Typesense/Operations.d.ts delete mode 100644 lib/Typesense/Operations.js delete mode 100644 lib/Typesense/Operations.js.map delete mode 100644 lib/Typesense/Override.d.ts delete mode 100644 lib/Typesense/Override.js delete mode 100644 lib/Typesense/Override.js.map delete mode 100644 lib/Typesense/Overrides.d.ts delete mode 100644 lib/Typesense/Overrides.js delete mode 100644 lib/Typesense/Overrides.js.map delete mode 100644 lib/Typesense/Preset.d.ts delete mode 100644 lib/Typesense/Preset.js delete mode 100644 lib/Typesense/Preset.js.map delete mode 100644 lib/Typesense/Presets.d.ts delete mode 100644 lib/Typesense/Presets.js delete mode 100644 lib/Typesense/Presets.js.map delete mode 100644 lib/Typesense/RequestWithCache.d.ts delete mode 100644 lib/Typesense/RequestWithCache.js delete mode 100644 lib/Typesense/RequestWithCache.js.map delete mode 100644 lib/Typesense/SearchClient.d.ts delete mode 100644 lib/Typesense/SearchClient.js delete mode 100644 lib/Typesense/SearchClient.js.map delete mode 100644 lib/Typesense/SearchOnlyCollection.d.ts delete mode 100644 lib/Typesense/SearchOnlyCollection.js delete mode 100644 lib/Typesense/SearchOnlyCollection.js.map delete mode 100644 lib/Typesense/SearchOnlyDocuments.d.ts delete mode 100644 lib/Typesense/SearchOnlyDocuments.js delete mode 100644 lib/Typesense/SearchOnlyDocuments.js.map delete mode 100644 lib/Typesense/Stats.d.ts delete mode 100644 lib/Typesense/Stats.js delete mode 100644 lib/Typesense/Stats.js.map delete mode 100644 lib/Typesense/Stopword.d.ts delete mode 100644 lib/Typesense/Stopword.js delete mode 100644 lib/Typesense/Stopword.js.map delete mode 100644 lib/Typesense/Stopwords.d.ts delete mode 100644 lib/Typesense/Stopwords.js delete mode 100644 lib/Typesense/Stopwords.js.map delete mode 100644 lib/Typesense/Synonym.d.ts delete mode 100644 lib/Typesense/Synonym.js delete mode 100644 lib/Typesense/Synonym.js.map delete mode 100644 lib/Typesense/Synonyms.d.ts delete mode 100644 lib/Typesense/Synonyms.js delete mode 100644 lib/Typesense/Synonyms.js.map delete mode 100644 lib/Typesense/Utils.d.ts delete mode 100644 lib/Typesense/Utils.js delete mode 100644 lib/Typesense/Utils.js.map diff --git a/dist/typesense.js b/dist/typesense.js deleted file mode 100644 index f61a614e..00000000 --- a/dist/typesense.js +++ /dev/null @@ -1,10702 +0,0 @@ -var Typesense; -/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./src/Typesense/Alias.ts": -/*!********************************!*\ - !*** ./src/Typesense/Alias.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Alias) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _Aliases__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Aliases */ "./src/Typesense/Aliases.ts"); - - - - - -var Alias = /*#__PURE__*/function () { - function Alias(name, apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Alias); - this.name = name; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Alias, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.delete(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function _delete() { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "endpointPath", - value: function endpointPath() { - return "".concat(_Aliases__WEBPACK_IMPORTED_MODULE_4__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.name)); - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Aliases.ts": -/*!**********************************!*\ - !*** ./src/Typesense/Aliases.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Aliases) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); - - - - -var RESOURCEPATH = "/aliases"; -var Aliases = /*#__PURE__*/function () { - function Aliases(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Aliases); - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Aliases, [{ - key: "upsert", - value: function () { - var _upsert = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(name, mapping) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.put(this.endpointPath(name), mapping)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function upsert(_x, _x2) { - return _upsert.apply(this, arguments); - } - return upsert; - }() - }, { - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.get(RESOURCEPATH)); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "endpointPath", - value: function endpointPath(aliasName) { - return "".concat(Aliases.RESOURCEPATH, "/").concat(encodeURIComponent(aliasName)); - } - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Analytics.ts": -/*!************************************!*\ - !*** ./src/Typesense/Analytics.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Analytics) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js"); -/* harmony import */ var _AnalyticsRules__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AnalyticsRules */ "./src/Typesense/AnalyticsRules.ts"); -/* harmony import */ var _AnalyticsRule__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AnalyticsRule */ "./src/Typesense/AnalyticsRule.ts"); -/* harmony import */ var _AnalyticsEvents__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AnalyticsEvents */ "./src/Typesense/AnalyticsEvents.ts"); - - - - - - -var RESOURCEPATH = "/analytics"; -var Analytics = /*#__PURE__*/function () { - function Analytics(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__["default"])(this, Analytics); - (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])(this, "individualAnalyticsRules", {}); - this.apiCall = apiCall; - this.apiCall = apiCall; - this._analyticsRules = new _AnalyticsRules__WEBPACK_IMPORTED_MODULE_3__["default"](this.apiCall); - this._analyticsEvents = new _AnalyticsEvents__WEBPACK_IMPORTED_MODULE_5__["default"](this.apiCall); - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__["default"])(Analytics, [{ - key: "rules", - value: function rules(id) { - if (id === undefined) { - return this._analyticsRules; - } else { - if (this.individualAnalyticsRules[id] === undefined) { - this.individualAnalyticsRules[id] = new _AnalyticsRule__WEBPACK_IMPORTED_MODULE_4__["default"](id, this.apiCall); - } - return this.individualAnalyticsRules[id]; - } - } - }, { - key: "events", - value: function events() { - return this._analyticsEvents; - } - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/AnalyticsEvents.ts": -/*!******************************************!*\ - !*** ./src/Typesense/AnalyticsEvents.ts ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ AnalyticsEvents) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); - - - - -var RESOURCEPATH = "/analytics/events"; -var AnalyticsEvents = /*#__PURE__*/function () { - function AnalyticsEvents(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, AnalyticsEvents); - this.apiCall = apiCall; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(AnalyticsEvents, [{ - key: "create", - value: function () { - var _create = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(params) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.post(this.endpointPath(), params)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function create(_x) { - return _create.apply(this, arguments); - } - return create; - }() - }, { - key: "endpointPath", - value: function endpointPath(operation) { - return "".concat(AnalyticsEvents.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - } - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/AnalyticsRule.ts": -/*!****************************************!*\ - !*** ./src/Typesense/AnalyticsRule.ts ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ AnalyticsRule) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _AnalyticsRules__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AnalyticsRules */ "./src/Typesense/AnalyticsRules.ts"); - - - - - -var AnalyticsRule = /*#__PURE__*/function () { - function AnalyticsRule(name, apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, AnalyticsRule); - this.name = name; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(AnalyticsRule, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.delete(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function _delete() { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "endpointPath", - value: function endpointPath() { - return "".concat(_AnalyticsRules__WEBPACK_IMPORTED_MODULE_4__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.name)); - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/AnalyticsRules.ts": -/*!*****************************************!*\ - !*** ./src/Typesense/AnalyticsRules.ts ***! - \*****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ AnalyticsRules) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); - - - - -var RESOURCEPATH = "/analytics/rules"; -var AnalyticsRules = /*#__PURE__*/function () { - function AnalyticsRules(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, AnalyticsRules); - this.apiCall = apiCall; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(AnalyticsRules, [{ - key: "upsert", - value: function () { - var _upsert = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(name, params) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.put(this.endpointPath(name), params)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function upsert(_x, _x2) { - return _upsert.apply(this, arguments); - } - return upsert; - }() - }, { - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "endpointPath", - value: function endpointPath(operation) { - return "".concat(AnalyticsRules.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - } - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/ApiCall.ts": -/*!**********************************!*\ - !*** ./src/Typesense/ApiCall.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ ApiCall) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_readOnlyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/readOnlyError */ "./node_modules/@babel/runtime/helpers/esm/readOnlyError.js"); -/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js"); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! axios */ "./node_modules/axios/lib/axios.js"); -/* harmony import */ var http__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! http */ "?e89d"); -/* harmony import */ var http__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(http__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! https */ "?77e4"); -/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(https__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var _Errors__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Errors */ "./src/Typesense/Errors/index.ts"); -/* harmony import */ var _Errors_TypesenseError__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Errors/TypesenseError */ "./src/Typesense/Errors/TypesenseError.ts"); - - - - - - - - - - - -var APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; -var HEALTHY = true; -var UNHEALTHY = false; -var isNodeJSEnvironment = typeof process !== "undefined" && process.versions != null && process.versions.node != null; -var ApiCall = /*#__PURE__*/function () { - function ApiCall(configuration) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__["default"])(this, ApiCall); - this.configuration = configuration; - this.apiKey = this.configuration.apiKey; - this.nodes = this.configuration.nodes == null ? this.configuration.nodes : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes - this.nearestNode = this.configuration.nearestNode == null ? this.configuration.nearestNode : JSON.parse(JSON.stringify(this.configuration.nearestNode)); - this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds; - this.healthcheckIntervalSeconds = this.configuration.healthcheckIntervalSeconds; - this.numRetriesPerRequest = this.configuration.numRetries; - this.retryIntervalSeconds = this.configuration.retryIntervalSeconds; - this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam; - this.additionalUserHeaders = this.configuration.additionalHeaders; - this.logger = this.configuration.logger; - this.initializeMetadataForNodes(); - this.currentNodeIndex = -1; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__["default"])(ApiCall, [{ - key: "get", - value: function () { - var _get = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee(endpoint) { - var queryParameters, - _ref, - _ref$abortSignal, - abortSignal, - _ref$responseType, - responseType, - _args = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - queryParameters = _args.length > 1 && _args[1] !== undefined ? _args[1] : {}; - _ref = _args.length > 2 && _args[2] !== undefined ? _args[2] : {}, _ref$abortSignal = _ref.abortSignal, abortSignal = _ref$abortSignal === void 0 ? null : _ref$abortSignal, _ref$responseType = _ref.responseType, responseType = _ref$responseType === void 0 ? undefined : _ref$responseType; - return _context.abrupt("return", this.performRequest("get", endpoint, { - queryParameters: queryParameters, - abortSignal: abortSignal, - responseType: responseType - })); - case 3: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function get(_x) { - return _get.apply(this, arguments); - } - return get; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee2(endpoint) { - var queryParameters, - _args2 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - queryParameters = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {}; - return _context2.abrupt("return", this.performRequest("delete", endpoint, { - queryParameters: queryParameters - })); - case 2: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function _delete(_x2) { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "post", - value: function () { - var _post = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee3(endpoint) { - var bodyParameters, - queryParameters, - additionalHeaders, - _args3 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - bodyParameters = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {}; - queryParameters = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : {}; - additionalHeaders = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : {}; - return _context3.abrupt("return", this.performRequest("post", endpoint, { - queryParameters: queryParameters, - bodyParameters: bodyParameters, - additionalHeaders: additionalHeaders - })); - case 4: - case "end": - return _context3.stop(); - } - }, _callee3, this); - })); - function post(_x3) { - return _post.apply(this, arguments); - } - return post; - }() - }, { - key: "put", - value: function () { - var _put = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee4(endpoint) { - var bodyParameters, - queryParameters, - _args4 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee4$(_context4) { - while (1) switch (_context4.prev = _context4.next) { - case 0: - bodyParameters = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : {}; - queryParameters = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : {}; - return _context4.abrupt("return", this.performRequest("put", endpoint, { - queryParameters: queryParameters, - bodyParameters: bodyParameters - })); - case 3: - case "end": - return _context4.stop(); - } - }, _callee4, this); - })); - function put(_x4) { - return _put.apply(this, arguments); - } - return put; - }() - }, { - key: "patch", - value: function () { - var _patch = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee5(endpoint) { - var bodyParameters, - queryParameters, - _args5 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee5$(_context5) { - while (1) switch (_context5.prev = _context5.next) { - case 0: - bodyParameters = _args5.length > 1 && _args5[1] !== undefined ? _args5[1] : {}; - queryParameters = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : {}; - return _context5.abrupt("return", this.performRequest("patch", endpoint, { - queryParameters: queryParameters, - bodyParameters: bodyParameters - })); - case 3: - case "end": - return _context5.stop(); - } - }, _callee5, this); - })); - function patch(_x5) { - return _patch.apply(this, arguments); - } - return patch; - }() - }, { - key: "getAdapter", - value: function getAdapter() { - if (!this.configuration.axiosAdapter) return undefined; - if (typeof this.configuration.axiosAdapter === "function") return this.configuration.axiosAdapter; - var isCloudflareWorkers = typeof navigator !== "undefined" && navigator.userAgent === "Cloudflare-Workers"; - return isCloudflareWorkers ? axios__WEBPACK_IMPORTED_MODULE_10__["default"].getAdapter(this.configuration.axiosAdapter).bind(globalThis) : axios__WEBPACK_IMPORTED_MODULE_10__["default"].getAdapter(this.configuration.axiosAdapter); - } - }, { - key: "performRequest", - value: function () { - var _performRequest = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee6(requestType, endpoint, _ref2) { - var _this = this; - var _ref2$queryParameters, queryParameters, _ref2$bodyParameters, bodyParameters, _ref2$additionalHeade, additionalHeaders, _ref2$abortSignal, abortSignal, _ref2$responseType, responseType, _ref2$skipConnectionT, skipConnectionTimeout, _ref2$enableKeepAlive, enableKeepAlive, requestNumber, lastException, wasAborted, _loop, _ret, numTries; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee6$(_context7) { - while (1) switch (_context7.prev = _context7.next) { - case 0: - _ref2$queryParameters = _ref2.queryParameters, queryParameters = _ref2$queryParameters === void 0 ? null : _ref2$queryParameters, _ref2$bodyParameters = _ref2.bodyParameters, bodyParameters = _ref2$bodyParameters === void 0 ? null : _ref2$bodyParameters, _ref2$additionalHeade = _ref2.additionalHeaders, additionalHeaders = _ref2$additionalHeade === void 0 ? {} : _ref2$additionalHeade, _ref2$abortSignal = _ref2.abortSignal, abortSignal = _ref2$abortSignal === void 0 ? null : _ref2$abortSignal, _ref2$responseType = _ref2.responseType, responseType = _ref2$responseType === void 0 ? undefined : _ref2$responseType, _ref2$skipConnectionT = _ref2.skipConnectionTimeout, skipConnectionTimeout = _ref2$skipConnectionT === void 0 ? false : _ref2$skipConnectionT, _ref2$enableKeepAlive = _ref2.enableKeepAlive, enableKeepAlive = _ref2$enableKeepAlive === void 0 ? undefined : _ref2$enableKeepAlive; - this.configuration.validate(); - requestNumber = Date.now(); - wasAborted = false; - this.logger.debug("Request #".concat(requestNumber, ": Performing ").concat(requestType.toUpperCase(), " request: ").concat(endpoint)); - _loop = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().mark(function _loop() { - var node, abortListener, requestOptions, cancelToken, source, response, _response$data, _response$data2, _error$code, _error$response; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _loop$(_context6) { - while (1) switch (_context6.prev = _context6.next) { - case 0: - node = _this.getNextNode(requestNumber); - _this.logger.debug("Request #".concat(requestNumber, ": Attempting ").concat(requestType.toUpperCase(), " request Try #").concat(numTries, " to Node ").concat(node.index)); - if (!(abortSignal && abortSignal.aborted)) { - _context6.next = 4; - break; - } - return _context6.abrupt("return", { - v: Promise.reject(new Error("Request aborted by caller.")) - }); - case 4: - _context6.prev = 4; - requestOptions = { - adapter: _this.getAdapter(), - method: requestType, - url: _this.uriFor(endpoint, node), - headers: Object.assign({}, _this.defaultHeaders(), additionalHeaders, _this.additionalUserHeaders), - maxContentLength: Infinity, - maxBodyLength: Infinity, - responseType: responseType, - validateStatus: function validateStatus(status) { - /* Override default validateStatus, which only considers 2xx a success. - In our case, if the server returns any HTTP code, we will handle it below. - We do this to be able to raise custom errors based on response code. - */ - return status > 0; - }, - transformResponse: [function (data, headers) { - var transformedData = data; - if (headers !== undefined && typeof data === "string" && headers["content-type"] && headers["content-type"].startsWith("application/json")) { - transformedData = JSON.parse(data); - } - return transformedData; - }] - }; - if (skipConnectionTimeout !== true) { - requestOptions.timeout = _this.connectionTimeoutSeconds * 1000; - } - if (queryParameters && Object.keys(queryParameters).length !== 0) { - requestOptions.params = queryParameters; - } - if (_this.sendApiKeyAsQueryParam) { - requestOptions.params = requestOptions.params || {}; - requestOptions.params["x-typesense-api-key"] = _this.apiKey; - } - if (_this.configuration.httpAgent) { - _this.logger.debug("Request #".concat(requestNumber, ": Using custom httpAgent")); - requestOptions.httpAgent = _this.configuration.httpAgent; - } else if (enableKeepAlive === true) { - if (!isNodeJSEnvironment) { - _this.logger.warn("Request #".concat(requestNumber, ": Cannot use custom httpAgent in a browser environment to enable keepAlive")); - } else { - _this.logger.debug("Request #".concat(requestNumber, ": Enabling KeepAlive")); - requestOptions.httpAgent = new http__WEBPACK_IMPORTED_MODULE_6__.Agent({ - keepAlive: true - }); - } - } - if (_this.configuration.httpsAgent) { - _this.logger.debug("Request #".concat(requestNumber, ": Using custom httpsAgent")); - requestOptions.httpsAgent = _this.configuration.httpsAgent; - } else if (enableKeepAlive === true) { - if (!isNodeJSEnvironment) { - _this.logger.warn("Request #".concat(requestNumber, ": Cannot use custom httpAgent in a browser environment to enable keepAlive")); - } else { - _this.logger.debug("Request #".concat(requestNumber, ": Enabling keepAlive")); - requestOptions.httpsAgent = new https__WEBPACK_IMPORTED_MODULE_7__.Agent({ - keepAlive: true - }); - } - } - if (_this.configuration.paramsSerializer) { - _this.logger.debug("Request #".concat(requestNumber, ": Using custom paramsSerializer")); - requestOptions.paramsSerializer = _this.configuration.paramsSerializer; - } - if (bodyParameters && (typeof bodyParameters === "string" && bodyParameters.length !== 0 || (0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__["default"])(bodyParameters) === "object" && Object.keys(bodyParameters).length !== 0)) { - requestOptions.data = bodyParameters; - } - - // Translate from user-provided AbortController to the Axios request cancel mechanism. - if (abortSignal) { - cancelToken = axios__WEBPACK_IMPORTED_MODULE_10__["default"].CancelToken; - source = cancelToken.source(); - abortListener = function abortListener() { - wasAborted = true; - source.cancel(); - }; - abortSignal.addEventListener("abort", abortListener); - requestOptions.cancelToken = source.token; - } - _context6.next = 16; - return (0,axios__WEBPACK_IMPORTED_MODULE_10__["default"])(requestOptions); - case 16: - response = _context6.sent; - if (response.status >= 1 && response.status <= 499) { - // Treat any status code > 0 and < 500 to be an indication that node is healthy - // We exclude 0 since some clients return 0 when request fails - _this.setNodeHealthcheck(node, HEALTHY); - } - _this.logger.debug("Request #".concat(requestNumber, ": Request to Node ").concat(node.index, " was made. Response Code was ").concat(response.status, ".")); - if (!(response.status >= 200 && response.status < 300)) { - _context6.next = 23; - break; - } - return _context6.abrupt("return", { - v: Promise.resolve(response.data) - }); - case 23: - if (!(response.status < 500)) { - _context6.next = 27; - break; - } - return _context6.abrupt("return", { - v: Promise.reject(_this.customErrorForResponse(response, (_response$data = response.data) === null || _response$data === void 0 ? void 0 : _response$data.message, requestOptions.data)) - }); - case 27: - throw _this.customErrorForResponse(response, (_response$data2 = response.data) === null || _response$data2 === void 0 ? void 0 : _response$data2.message, requestOptions.data); - case 28: - _context6.next = 40; - break; - case 30: - _context6.prev = 30; - _context6.t0 = _context6["catch"](4); - // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts - if (!wasAborted) { - _this.setNodeHealthcheck(node, UNHEALTHY); - } - lastException = _context6.t0; - _this.logger.warn("Request #".concat(requestNumber, ": Request to Node ").concat(node.index, " failed due to \"").concat((_error$code = _context6.t0 === null || _context6.t0 === void 0 ? void 0 : _context6.t0.code) !== null && _error$code !== void 0 ? _error$code : "", " ").concat(_context6.t0.message).concat(_context6.t0.response == null ? "" : " - " + JSON.stringify((_error$response = _context6.t0.response) === null || _error$response === void 0 ? void 0 : _error$response.data), "\"")); - // this.logger.debug(error.stack) - if (!wasAborted) { - _context6.next = 37; - break; - } - return _context6.abrupt("return", { - v: Promise.reject(new Error("Request aborted by caller.")) - }); - case 37: - if (numTries < _this.numRetriesPerRequest + 1) { - _this.logger.warn("Request #".concat(requestNumber, ": Sleeping for ").concat(_this.retryIntervalSeconds, "s and then retrying request...")); - } - _context6.next = 40; - return _this.timer(_this.retryIntervalSeconds); - case 40: - _context6.prev = 40; - if (abortSignal && abortListener) { - abortSignal.removeEventListener("abort", abortListener); - } - return _context6.finish(40); - case 43: - case "end": - return _context6.stop(); - } - }, _loop, null, [[4, 30, 40, 43]]); - }); - numTries = 1; - case 7: - if (!(numTries <= this.numRetriesPerRequest + 1)) { - _context7.next = 15; - break; - } - return _context7.delegateYield(_loop(), "t0", 9); - case 9: - _ret = _context7.t0; - if (!_ret) { - _context7.next = 12; - break; - } - return _context7.abrupt("return", _ret.v); - case 12: - numTries++; - _context7.next = 7; - break; - case 15: - this.logger.debug("Request #".concat(requestNumber, ": No retries left. Raising last error")); - return _context7.abrupt("return", Promise.reject(lastException)); - case 17: - case "end": - return _context7.stop(); - } - }, _callee6, this); - })); - function performRequest(_x6, _x7, _x8) { - return _performRequest.apply(this, arguments); - } - return performRequest; - }() // Attempts to find the next healthy node, looping through the list of nodes once. - // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy - // so we can try the request for good measure, in case that node has become healthy since - }, { - key: "getNextNode", - value: function getNextNode() { - var requestNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - // Check if nearestNode is set and is healthy, if so return it - if (this.nearestNode != null) { - this.logger.debug("Request #".concat(requestNumber, ": Nodes Health: Node ").concat(this.nearestNode.index, " is ").concat(this.nearestNode.isHealthy === true ? "Healthy" : "Unhealthy")); - if (this.nearestNode.isHealthy === true || this.nodeDueForHealthcheck(this.nearestNode, requestNumber)) { - this.logger.debug("Request #".concat(requestNumber, ": Updated current node to Node ").concat(this.nearestNode.index)); - return this.nearestNode; - } - this.logger.debug("Request #".concat(requestNumber, ": Falling back to individual nodes")); - } - - // Fallback to nodes as usual - this.logger.debug("Request #".concat(requestNumber, ": Nodes Health: ").concat(this.nodes.map(function (node) { - return "Node ".concat(node.index, " is ").concat(node.isHealthy === true ? "Healthy" : "Unhealthy"); - }).join(" || "))); - var candidateNode = this.nodes[0]; - for (var i = 0; i <= this.nodes.length; i++) { - this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length; - candidateNode = this.nodes[this.currentNodeIndex]; - if (candidateNode.isHealthy === true || this.nodeDueForHealthcheck(candidateNode, requestNumber)) { - this.logger.debug("Request #".concat(requestNumber, ": Updated current node to Node ").concat(candidateNode.index)); - return candidateNode; - } - } - - // None of the nodes are marked healthy, but some of them could have become healthy since last health check. - // So we will just return the next node. - this.logger.debug("Request #".concat(requestNumber, ": No healthy nodes were found. Returning the next node, Node ").concat(candidateNode.index)); - return candidateNode; - } - }, { - key: "nodeDueForHealthcheck", - value: function nodeDueForHealthcheck(node) { - var requestNumber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var isDueForHealthcheck = Date.now() - node.lastAccessTimestamp > this.healthcheckIntervalSeconds * 1000; - if (isDueForHealthcheck) { - this.logger.debug("Request #".concat(requestNumber, ": Node ").concat(node.index, " has exceeded healtcheckIntervalSeconds of ").concat(this.healthcheckIntervalSeconds, ". Adding it back into rotation.")); - } - return isDueForHealthcheck; - } - }, { - key: "initializeMetadataForNodes", - value: function initializeMetadataForNodes() { - var _this2 = this; - if (this.nearestNode != null) { - this.nearestNode.index = "nearestNode"; - this.setNodeHealthcheck(this.nearestNode, HEALTHY); - } - this.nodes.forEach(function (node, i) { - node.index = i; - _this2.setNodeHealthcheck(node, HEALTHY); - }); - } - }, { - key: "setNodeHealthcheck", - value: function setNodeHealthcheck(node, isHealthy) { - node.isHealthy = isHealthy; - node.lastAccessTimestamp = Date.now(); - } - }, { - key: "uriFor", - value: function uriFor(endpoint, node) { - if (node.url != null) { - return "".concat(node.url).concat(endpoint); - } - return "".concat(node.protocol, "://").concat(node.host, ":").concat(node.port).concat(node.path).concat(endpoint); - } - }, { - key: "defaultHeaders", - value: function defaultHeaders() { - var defaultHeaders = {}; - if (!this.sendApiKeyAsQueryParam) { - defaultHeaders[APIKEYHEADERNAME] = this.apiKey; - } - defaultHeaders["Content-Type"] = "application/json"; - return defaultHeaders; - } - }, { - key: "timer", - value: function () { - var _timer = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee7(seconds) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee7$(_context8) { - while (1) switch (_context8.prev = _context8.next) { - case 0: - return _context8.abrupt("return", new Promise(function (resolve) { - return setTimeout(resolve, seconds * 1000); - })); - case 1: - case "end": - return _context8.stop(); - } - }, _callee7); - })); - function timer(_x9) { - return _timer.apply(this, arguments); - } - return timer; - }() - }, { - key: "customErrorForResponse", - value: function customErrorForResponse(response, messageFromServer, httpBody) { - var errorMessage = "Request failed with HTTP code ".concat(response.status); - if (typeof messageFromServer === "string" && messageFromServer.trim() !== "") { - errorMessage += " | Server said: ".concat(messageFromServer); - } - var error = new _Errors_TypesenseError__WEBPACK_IMPORTED_MODULE_9__["default"](errorMessage, httpBody, response.status); - if (response.status === 400) { - error = new _Errors__WEBPACK_IMPORTED_MODULE_8__.RequestMalformed(errorMessage); - } else if (response.status === 401) { - error = new _Errors__WEBPACK_IMPORTED_MODULE_8__.RequestUnauthorized(errorMessage); - } else if (response.status === 404) { - error = new _Errors__WEBPACK_IMPORTED_MODULE_8__.ObjectNotFound(errorMessage); - } else if (response.status === 409) { - error = new _Errors__WEBPACK_IMPORTED_MODULE_8__.ObjectAlreadyExists(errorMessage); - } else if (response.status === 422) { - error = new _Errors__WEBPACK_IMPORTED_MODULE_8__.ObjectUnprocessable(errorMessage); - } else if (response.status >= 500 && response.status <= 599) { - error = new _Errors__WEBPACK_IMPORTED_MODULE_8__.ServerError(errorMessage); - } else { - error = new _Errors__WEBPACK_IMPORTED_MODULE_8__.HTTPError(errorMessage); - } - return error; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Client.ts": -/*!*********************************!*\ - !*** ./src/Typesense/Client.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Client) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _Configuration__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Configuration */ "./src/Typesense/Configuration.ts"); -/* harmony import */ var _ApiCall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ApiCall */ "./src/Typesense/ApiCall.ts"); -/* harmony import */ var _Collections__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Collections */ "./src/Typesense/Collections.ts"); -/* harmony import */ var _Collection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Collection */ "./src/Typesense/Collection.ts"); -/* harmony import */ var _Aliases__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Aliases */ "./src/Typesense/Aliases.ts"); -/* harmony import */ var _Alias__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Alias */ "./src/Typesense/Alias.ts"); -/* harmony import */ var _Keys__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Keys */ "./src/Typesense/Keys.ts"); -/* harmony import */ var _Key__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Key */ "./src/Typesense/Key.ts"); -/* harmony import */ var _Debug__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Debug */ "./src/Typesense/Debug.ts"); -/* harmony import */ var _Metrics__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Metrics */ "./src/Typesense/Metrics.ts"); -/* harmony import */ var _Stats__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Stats */ "./src/Typesense/Stats.ts"); -/* harmony import */ var _Health__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./Health */ "./src/Typesense/Health.ts"); -/* harmony import */ var _Operations__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./Operations */ "./src/Typesense/Operations.ts"); -/* harmony import */ var _MultiSearch__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./MultiSearch */ "./src/Typesense/MultiSearch.ts"); -/* harmony import */ var _Presets__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./Presets */ "./src/Typesense/Presets.ts"); -/* harmony import */ var _Preset__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./Preset */ "./src/Typesense/Preset.ts"); -/* harmony import */ var _Analytics__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./Analytics */ "./src/Typesense/Analytics.ts"); -/* harmony import */ var _Stopwords__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./Stopwords */ "./src/Typesense/Stopwords.ts"); -/* harmony import */ var _Stopword__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./Stopword */ "./src/Typesense/Stopword.ts"); -/* harmony import */ var _Conversations__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./Conversations */ "./src/Typesense/Conversations.ts"); -/* harmony import */ var _Conversation__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./Conversation */ "./src/Typesense/Conversation.ts"); - - -/* eslint-disable no-dupe-class-members */ - - - - - - - - - - - - - - - - - - - - - - -var Client = /*#__PURE__*/function () { - function Client(options) { - var _options$sendApiKeyAs; - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__["default"])(this, Client); - options.sendApiKeyAsQueryParam = (_options$sendApiKeyAs = options.sendApiKeyAsQueryParam) !== null && _options$sendApiKeyAs !== void 0 ? _options$sendApiKeyAs : false; - this.configuration = new _Configuration__WEBPACK_IMPORTED_MODULE_2__["default"](options); - this.apiCall = new _ApiCall__WEBPACK_IMPORTED_MODULE_3__["default"](this.configuration); - this.debug = new _Debug__WEBPACK_IMPORTED_MODULE_10__["default"](this.apiCall); - this.metrics = new _Metrics__WEBPACK_IMPORTED_MODULE_11__["default"](this.apiCall); - this.stats = new _Stats__WEBPACK_IMPORTED_MODULE_12__["default"](this.apiCall); - this.health = new _Health__WEBPACK_IMPORTED_MODULE_13__["default"](this.apiCall); - this.operations = new _Operations__WEBPACK_IMPORTED_MODULE_14__["default"](this.apiCall); - this.multiSearch = new _MultiSearch__WEBPACK_IMPORTED_MODULE_15__["default"](this.apiCall, this.configuration); - this._collections = new _Collections__WEBPACK_IMPORTED_MODULE_4__["default"](this.apiCall); - this.individualCollections = {}; - this._aliases = new _Aliases__WEBPACK_IMPORTED_MODULE_6__["default"](this.apiCall); - this.individualAliases = {}; - this._keys = new _Keys__WEBPACK_IMPORTED_MODULE_8__["default"](this.apiCall); - this.individualKeys = {}; - this._presets = new _Presets__WEBPACK_IMPORTED_MODULE_16__["default"](this.apiCall); - this.individualPresets = {}; - this._stopwords = new _Stopwords__WEBPACK_IMPORTED_MODULE_19__["default"](this.apiCall); - this.individualStopwords = {}; - this.analytics = new _Analytics__WEBPACK_IMPORTED_MODULE_18__["default"](this.apiCall); - this._conversations = new _Conversations__WEBPACK_IMPORTED_MODULE_21__["default"](this.apiCall); - this.individualConversations = {}; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__["default"])(Client, [{ - key: "collections", - value: function collections(collectionName) { - if (collectionName === undefined) { - return this._collections; - } else { - if (this.individualCollections[collectionName] === undefined) { - this.individualCollections[collectionName] = new _Collection__WEBPACK_IMPORTED_MODULE_5__["default"](collectionName, this.apiCall, this.configuration); - } - return this.individualCollections[collectionName]; - } - } - }, { - key: "aliases", - value: function aliases(aliasName) { - if (aliasName === undefined) { - return this._aliases; - } else { - if (this.individualAliases[aliasName] === undefined) { - this.individualAliases[aliasName] = new _Alias__WEBPACK_IMPORTED_MODULE_7__["default"](aliasName, this.apiCall); - } - return this.individualAliases[aliasName]; - } - } - }, { - key: "keys", - value: function keys(id) { - if (id === undefined) { - return this._keys; - } else { - if (this.individualKeys[id] === undefined) { - this.individualKeys[id] = new _Key__WEBPACK_IMPORTED_MODULE_9__["default"](id, this.apiCall); - } - return this.individualKeys[id]; - } - } - }, { - key: "presets", - value: function presets(id) { - if (id === undefined) { - return this._presets; - } else { - if (this.individualPresets[id] === undefined) { - this.individualPresets[id] = new _Preset__WEBPACK_IMPORTED_MODULE_17__["default"](id, this.apiCall); - } - return this.individualPresets[id]; - } - } - }, { - key: "stopwords", - value: function stopwords(id) { - if (id === undefined) { - return this._stopwords; - } else { - if (this.individualStopwords[id] === undefined) { - this.individualStopwords[id] = new _Stopword__WEBPACK_IMPORTED_MODULE_20__["default"](id, this.apiCall); - } - return this.individualStopwords[id]; - } - } - }, { - key: "conversations", - value: function conversations(id) { - if (id === undefined) { - return this._conversations; - } else { - if (this.individualConversations[id] === undefined) { - this.individualConversations[id] = new _Conversation__WEBPACK_IMPORTED_MODULE_22__["default"](id, this.apiCall); - } - return this.individualConversations[id]; - } - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Collection.ts": -/*!*************************************!*\ - !*** ./src/Typesense/Collection.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Collection) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _Collections__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Collections */ "./src/Typesense/Collections.ts"); -/* harmony import */ var _Documents__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Documents */ "./src/Typesense/Documents.ts"); -/* harmony import */ var _Errors__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Errors */ "./src/Typesense/Errors/index.ts"); -/* harmony import */ var _Overrides__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Overrides */ "./src/Typesense/Overrides.ts"); -/* harmony import */ var _Override__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Override */ "./src/Typesense/Override.ts"); -/* harmony import */ var _Synonyms__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Synonyms */ "./src/Typesense/Synonyms.ts"); -/* harmony import */ var _Synonym__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Synonym */ "./src/Typesense/Synonym.ts"); -/* harmony import */ var _Document__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Document */ "./src/Typesense/Document.ts"); - - - - - - - - - - - - - -var Collection = /*#__PURE__*/function () { - function Collection(name, apiCall, configuration) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Collection); - (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__["default"])(this, "individualDocuments", {}); - (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__["default"])(this, "individualOverrides", {}); - (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__["default"])(this, "individualSynonyms", {}); - this.name = name; - this.apiCall = apiCall; - this.configuration = configuration; - this.name = name; - this.apiCall = apiCall; - this.configuration = configuration; - this._documents = new _Documents__WEBPACK_IMPORTED_MODULE_6__["default"](this.name, this.apiCall, this.configuration); - this._overrides = new _Overrides__WEBPACK_IMPORTED_MODULE_8__["default"](this.name, this.apiCall); - this._synonyms = new _Synonyms__WEBPACK_IMPORTED_MODULE_10__["default"](this.name, this.apiCall); - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Collection, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "update", - value: function () { - var _update = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(schema) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.patch(this.endpointPath(), schema)); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function update(_x) { - return _update.apply(this, arguments); - } - return update; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3() { - var options, - _args3 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - options = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {}; - return _context3.abrupt("return", this.apiCall.delete(this.endpointPath(), options)); - case 2: - case "end": - return _context3.stop(); - } - }, _callee3, this); - })); - function _delete() { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "exists", - value: function () { - var _exists = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee4() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee4$(_context4) { - while (1) switch (_context4.prev = _context4.next) { - case 0: - _context4.prev = 0; - _context4.next = 3; - return this.retrieve(); - case 3: - return _context4.abrupt("return", true); - case 6: - _context4.prev = 6; - _context4.t0 = _context4["catch"](0); - if (!(_context4.t0 instanceof _Errors__WEBPACK_IMPORTED_MODULE_7__.ObjectNotFound)) { - _context4.next = 10; - break; - } - return _context4.abrupt("return", false); - case 10: - throw _context4.t0; - case 11: - case "end": - return _context4.stop(); - } - }, _callee4, this, [[0, 6]]); - })); - function exists() { - return _exists.apply(this, arguments); - } - return exists; - }() - }, { - key: "documents", - value: function documents(documentId) { - if (!documentId) { - return this._documents; - } else { - if (this.individualDocuments[documentId] === undefined) { - this.individualDocuments[documentId] = new _Document__WEBPACK_IMPORTED_MODULE_12__.Document(this.name, documentId, this.apiCall); - } - return this.individualDocuments[documentId]; - } - } - }, { - key: "overrides", - value: function overrides(overrideId) { - if (overrideId === undefined) { - return this._overrides; - } else { - if (this.individualOverrides[overrideId] === undefined) { - this.individualOverrides[overrideId] = new _Override__WEBPACK_IMPORTED_MODULE_9__["default"](this.name, overrideId, this.apiCall); - } - return this.individualOverrides[overrideId]; - } - } - }, { - key: "synonyms", - value: function synonyms(synonymId) { - if (synonymId === undefined) { - return this._synonyms; - } else { - if (this.individualSynonyms[synonymId] === undefined) { - this.individualSynonyms[synonymId] = new _Synonym__WEBPACK_IMPORTED_MODULE_11__["default"](this.name, synonymId, this.apiCall); - } - return this.individualSynonyms[synonymId]; - } - } - }, { - key: "endpointPath", - value: function endpointPath() { - return "".concat(_Collections__WEBPACK_IMPORTED_MODULE_5__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.name)); - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Collections.ts": -/*!**************************************!*\ - !*** ./src/Typesense/Collections.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Collections) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); - - - - -var RESOURCEPATH = "/collections"; -var Collections = /*#__PURE__*/function () { - function Collections(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Collections); - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Collections, [{ - key: "create", - value: function () { - var _create = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(schema) { - var options, - _args = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {}; - return _context.abrupt("return", this.apiCall.post(RESOURCEPATH, schema, options)); - case 2: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function create(_x) { - return _create.apply(this, arguments); - } - return create; - }() - }, { - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - var options, - _args2 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {}; - return _context2.abrupt("return", this.apiCall.get(RESOURCEPATH, options)); - case 2: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Configuration.ts": -/*!****************************************!*\ - !*** ./src/Typesense/Configuration.ts ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Configuration) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var loglevel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! loglevel */ "./node_modules/loglevel/lib/loglevel.js"); -/* harmony import */ var loglevel__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(loglevel__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _Errors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Errors */ "./src/Typesense/Errors/index.ts"); - - - -function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } -function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } - - -var Configuration = /*#__PURE__*/function () { - function Configuration(options) { - var _this = this; - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Configuration); - this.nodes = options.nodes || []; - this.nodes = this.nodes.map(function (node) { - return _this.setDefaultPathInNode(node); - }).map(function (node) { - return _this.setDefaultPortInNode(node); - }).map(function (node) { - return _objectSpread({}, node); - }); // Make a deep copy - - if (options.randomizeNodes == null) { - options.randomizeNodes = true; - } - if (options.randomizeNodes === true) { - this.shuffleArray(this.nodes); - } - this.nearestNode = options.nearestNode; - this.nearestNode = this.setDefaultPathInNode(this.nearestNode); - this.nearestNode = this.setDefaultPortInNode(this.nearestNode); - this.connectionTimeoutSeconds = options.connectionTimeoutSeconds || options.timeoutSeconds || 5; - this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60; - this.numRetries = (options.numRetries !== undefined && options.numRetries >= 0 ? options.numRetries : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; - this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1; - this.apiKey = options.apiKey; - this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient - - this.cacheSearchResultsForSeconds = options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default - this.useServerSideSearchCache = options.useServerSideSearchCache || false; - this.axiosAdapter = options.axiosAdapter; - this.logger = options.logger || loglevel__WEBPACK_IMPORTED_MODULE_3__; - this.logLevel = options.logLevel || "warn"; - this.logger.setLevel(this.logLevel); - this.additionalHeaders = options.additionalHeaders; - this.httpAgent = options.httpAgent; - this.httpsAgent = options.httpsAgent; - this.paramsSerializer = options.paramsSerializer; - this.showDeprecationWarnings(options); - this.validate(); - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Configuration, [{ - key: "validate", - value: function validate() { - if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) { - throw new _Errors__WEBPACK_IMPORTED_MODULE_4__.MissingConfigurationError("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set"); - } - if (this.nearestNode != null && this.isNodeMissingAnyParameters(this.nearestNode)) { - throw new _Errors__WEBPACK_IMPORTED_MODULE_4__.MissingConfigurationError("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set"); - } - if (this.apiKey == null) { - throw new _Errors__WEBPACK_IMPORTED_MODULE_4__.MissingConfigurationError("Ensure that apiKey is set"); - } - return true; - } - }, { - key: "validateNodes", - value: function validateNodes() { - var _this2 = this; - return this.nodes.some(function (node) { - return _this2.isNodeMissingAnyParameters(node); - }); - } - }, { - key: "isNodeMissingAnyParameters", - value: function isNodeMissingAnyParameters(node) { - return !["protocol", "host", "port", "path"].every(function (key) { - return node.hasOwnProperty(key); - }) && node["url"] == null; - } - }, { - key: "setDefaultPathInNode", - value: function setDefaultPathInNode(node) { - if (node != null && !node.hasOwnProperty("path")) { - node["path"] = ""; - } - return node; - } - }, { - key: "setDefaultPortInNode", - value: function setDefaultPortInNode(node) { - if (node != null && !node.hasOwnProperty("port") && node.hasOwnProperty("protocol")) { - switch (node["protocol"]) { - case "https": - node["port"] = 443; - break; - case "http": - node["port"] = 80; - break; - } - } - return node; - } - }, { - key: "showDeprecationWarnings", - value: function showDeprecationWarnings(options) { - if (options.timeoutSeconds) { - this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"); - } - if (options.masterNode) { - this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"); - } - if (options.readReplicaNodes) { - this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12"); - } - } - }, { - key: "shuffleArray", - value: function shuffleArray(array) { - for (var i = array.length - 1; i > 0; i--) { - var j = Math.floor(Math.random() * (i + 1)); - var _ref = [array[j], array[i]]; - array[i] = _ref[0]; - array[j] = _ref[1]; - } - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Conversation.ts": -/*!***************************************!*\ - !*** ./src/Typesense/Conversation.ts ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Conversation) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _Conversations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Conversations */ "./src/Typesense/Conversations.ts"); - - - - - -var Conversation = /*#__PURE__*/function () { - function Conversation(id, apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Conversation); - this.id = id; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Conversation, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "update", - value: function () { - var _update = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2(params) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.put(this.endpointPath(), params)); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function update(_x) { - return _update.apply(this, arguments); - } - return update; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee3() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - return _context3.abrupt("return", this.apiCall.delete(this.endpointPath())); - case 1: - case "end": - return _context3.stop(); - } - }, _callee3, this); - })); - function _delete() { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "endpointPath", - value: function endpointPath() { - return "".concat(_Conversations__WEBPACK_IMPORTED_MODULE_4__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/ConversationModel.ts": -/*!********************************************!*\ - !*** ./src/Typesense/ConversationModel.ts ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ ConversationModel) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _ConversationModels__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ConversationModels */ "./src/Typesense/ConversationModels.ts"); - - - - - -var ConversationModel = /*#__PURE__*/function () { - function ConversationModel(id, apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, ConversationModel); - this.id = id; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(ConversationModel, [{ - key: "update", - value: function () { - var _update = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(params) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.put(this.endpointPath(), params)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function update(_x) { - return _update.apply(this, arguments); - } - return update; - }() - }, { - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee3() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - return _context3.abrupt("return", this.apiCall.delete(this.endpointPath())); - case 1: - case "end": - return _context3.stop(); - } - }, _callee3, this); - })); - function _delete() { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "endpointPath", - value: function endpointPath() { - return "".concat(_ConversationModels__WEBPACK_IMPORTED_MODULE_4__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/ConversationModels.ts": -/*!*********************************************!*\ - !*** ./src/Typesense/ConversationModels.ts ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ ConversationModels) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); - - - - -var RESOURCEPATH = "/conversations/models"; -var ConversationModels = /*#__PURE__*/function () { - function ConversationModels(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, ConversationModels); - this.apiCall = apiCall; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(ConversationModels, [{ - key: "create", - value: function () { - var _create = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(params) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.post(this.endpointPath(), params)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function create(_x) { - return _create.apply(this, arguments); - } - return create; - }() - }, { - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "endpointPath", - value: function endpointPath(operation) { - return "".concat(ConversationModels.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - } - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Conversations.ts": -/*!****************************************!*\ - !*** ./src/Typesense/Conversations.ts ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Conversations) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _ConversationModels__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ConversationModels */ "./src/Typesense/ConversationModels.ts"); -/* harmony import */ var _ConversationModel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ConversationModel */ "./src/Typesense/ConversationModel.ts"); - - - - - - - -var RESOURCEPATH = "/conversations"; -var Conversations = /*#__PURE__*/function () { - function Conversations(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Conversations); - (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__["default"])(this, "individualConversationModels", {}); - this.apiCall = apiCall; - this.apiCall = apiCall; - this._conversationsModels = new _ConversationModels__WEBPACK_IMPORTED_MODULE_5__["default"](this.apiCall); - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Conversations, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(RESOURCEPATH)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "models", - value: function models(id) { - if (id === undefined) { - return this._conversationsModels; - } else { - if (this.individualConversationModels[id] === undefined) { - this.individualConversationModels[id] = new _ConversationModel__WEBPACK_IMPORTED_MODULE_6__["default"](id, this.apiCall); - } - return this.individualConversationModels[id]; - } - } - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Debug.ts": -/*!********************************!*\ - !*** ./src/Typesense/Debug.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Debug) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); - - - - -var RESOURCEPATH = "/debug"; -var Debug = /*#__PURE__*/function () { - function Debug(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Debug); - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Debug, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(RESOURCEPATH)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Document.ts": -/*!***********************************!*\ - !*** ./src/Typesense/Document.ts ***! - \***********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ Document: () => (/* binding */ Document) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _Collections__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Collections */ "./src/Typesense/Collections.ts"); -/* harmony import */ var _Documents__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Documents */ "./src/Typesense/Documents.ts"); - - - - - - -var Document = /*#__PURE__*/function () { - function Document(collectionName, documentId, apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Document); - this.collectionName = collectionName; - this.documentId = documentId; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Document, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2(options) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.delete(this.endpointPath(), options)); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function _delete(_x) { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "update", - value: function () { - var _update = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee3(partialDocument) { - var options, - _args3 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - options = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {}; - return _context3.abrupt("return", this.apiCall.patch(this.endpointPath(), partialDocument, options)); - case 2: - case "end": - return _context3.stop(); - } - }, _callee3, this); - })); - function update(_x2) { - return _update.apply(this, arguments); - } - return update; - }() - }, { - key: "endpointPath", - value: function endpointPath() { - return "".concat(_Collections__WEBPACK_IMPORTED_MODULE_4__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(_Documents__WEBPACK_IMPORTED_MODULE_5__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.documentId)); - } - }]); -}(); - -/***/ }), - -/***/ "./src/Typesense/Documents.ts": -/*!************************************!*\ - !*** ./src/Typesense/Documents.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ arrayableParams: () => (/* binding */ arrayableParams), -/* harmony export */ "default": () => (/* binding */ Documents) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"); -/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js"); -/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _Errors__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Errors */ "./src/Typesense/Errors/index.ts"); -/* harmony import */ var _SearchOnlyDocuments__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./SearchOnlyDocuments */ "./src/Typesense/SearchOnlyDocuments.ts"); - - - - - - - -function _callSuper(t, o, e) { return o = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__["default"])(o), (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__["default"])(t).constructor) : o.apply(t, e)); } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } - - - -// Todo: use generic to extract filter_by values - -var arrayableParams = { - query_by: "query_by", - query_by_weights: "query_by_weights", - facet_by: "facet_by", - group_by: "group_by", - include_fields: "include_fields", - exclude_fields: "exclude_fields", - highlight_fields: "highlight_fields", - highlight_full_fields: "highlight_full_fields", - pinned_hits: "pinned_hits", - hidden_hits: "hidden_hits", - infix: "infix", - override_tags: "override_tags", - num_typos: "num_typos", - prefix: "prefix", - sort_by: "sort_by" -}; - -// Todo: we could infer whether this is a grouped response by adding the search params as a generic - -var isNodeJSEnvironment = typeof process !== "undefined" && process.versions != null && process.versions.node != null; -var Documents = /*#__PURE__*/function (_ref) { - function Documents(collectionName, apiCall, configuration) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Documents); - return _callSuper(this, Documents, [collectionName, apiCall, configuration]); - } - (0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__["default"])(Documents, _ref); - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Documents, [{ - key: "create", - value: function () { - var _create = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().mark(function _callee(document) { - var options, - _args = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {}; - if (document) { - _context.next = 3; - break; - } - throw new Error("No document provided"); - case 3: - return _context.abrupt("return", this.apiCall.post(this.endpointPath(), document, options)); - case 4: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function create(_x) { - return _create.apply(this, arguments); - } - return create; - }() - }, { - key: "upsert", - value: function () { - var _upsert = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().mark(function _callee2(document) { - var options, - _args2 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - options = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {}; - if (document) { - _context2.next = 3; - break; - } - throw new Error("No document provided"); - case 3: - return _context2.abrupt("return", this.apiCall.post(this.endpointPath(), document, Object.assign({}, options, { - action: "upsert" - }))); - case 4: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function upsert(_x2) { - return _upsert.apply(this, arguments); - } - return upsert; - }() - }, { - key: "update", - value: function () { - var _update = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().mark(function _callee3(document) { - var options, - _args3 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - options = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {}; - if (document) { - _context3.next = 3; - break; - } - throw new Error("No document provided"); - case 3: - if (!(options["filter_by"] != null)) { - _context3.next = 7; - break; - } - return _context3.abrupt("return", this.apiCall.patch(this.endpointPath(), document, Object.assign({}, options))); - case 7: - return _context3.abrupt("return", this.apiCall.post(this.endpointPath(), document, Object.assign({}, options, { - action: "update" - }))); - case 8: - case "end": - return _context3.stop(); - } - }, _callee3, this); - })); - function update(_x3) { - return _update.apply(this, arguments); - } - return update; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().mark(function _callee4() { - var query, - _args4 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().wrap(function _callee4$(_context4) { - while (1) switch (_context4.prev = _context4.next) { - case 0: - query = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {}; - return _context4.abrupt("return", this.apiCall.delete(this.endpointPath(), query)); - case 2: - case "end": - return _context4.stop(); - } - }, _callee4, this); - })); - function _delete() { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "createMany", - value: function () { - var _createMany = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().mark(function _callee5(documents) { - var options, - _args5 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().wrap(function _callee5$(_context5) { - while (1) switch (_context5.prev = _context5.next) { - case 0: - options = _args5.length > 1 && _args5[1] !== undefined ? _args5[1] : {}; - this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"); - return _context5.abrupt("return", this.import(documents, options)); - case 3: - case "end": - return _context5.stop(); - } - }, _callee5, this); - })); - function createMany(_x4) { - return _createMany.apply(this, arguments); - } - return createMany; - }() - /** - * Import a set of documents in a batch. - * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects. - * @param options - * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results. - */ - }, { - key: "import", - value: function () { - var _import2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().mark(function _callee6(documents) { - var options, - documentsInJSONLFormat, - resultsInJSONLFormat, - resultsInJSONFormat, - failedItems, - _args6 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().wrap(function _callee6$(_context6) { - while (1) switch (_context6.prev = _context6.next) { - case 0: - options = _args6.length > 1 && _args6[1] !== undefined ? _args6[1] : {}; - if (!Array.isArray(documents)) { - _context6.next = 13; - break; - } - _context6.prev = 2; - documentsInJSONLFormat = documents.map(function (document) { - return JSON.stringify(document); - }).join("\n"); - _context6.next = 11; - break; - case 6: - _context6.prev = 6; - _context6.t0 = _context6["catch"](2); - if (!(_context6.t0 instanceof RangeError && _context6.t0.message.includes("Too many properties to enumerate"))) { - _context6.next = 10; - break; - } - throw new Error("".concat(_context6.t0, "\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n ")); - case 10: - throw new Error(_context6.t0); - case 11: - _context6.next = 14; - break; - case 13: - documentsInJSONLFormat = documents; - case 14: - _context6.next = 16; - return this.apiCall.performRequest("post", this.endpointPath("import"), { - queryParameters: options, - bodyParameters: documentsInJSONLFormat, - additionalHeaders: { - "Content-Type": "text/plain" - }, - skipConnectionTimeout: true, - // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully - enableKeepAlive: isNodeJSEnvironment ? true : false // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 - }); - case 16: - resultsInJSONLFormat = _context6.sent; - if (!Array.isArray(documents)) { - _context6.next = 27; - break; - } - resultsInJSONFormat = resultsInJSONLFormat.split("\n").map(function (r) { - return JSON.parse(r); - }); - failedItems = resultsInJSONFormat.filter(function (r) { - return r.success === false; - }); - if (!(failedItems.length > 0)) { - _context6.next = 24; - break; - } - throw new _Errors__WEBPACK_IMPORTED_MODULE_7__.ImportError("".concat(resultsInJSONFormat.length - failedItems.length, " documents imported successfully, ").concat(failedItems.length, " documents failed during import. Use `error.importResults` from the raised exception to get a detailed error reason for each document."), resultsInJSONFormat, { - documentsInJSONLFormat: documentsInJSONLFormat, - options: options, - failedItems: failedItems, - successCount: resultsInJSONFormat.length - failedItems.length - }); - case 24: - return _context6.abrupt("return", resultsInJSONFormat); - case 25: - _context6.next = 28; - break; - case 27: - return _context6.abrupt("return", resultsInJSONLFormat); - case 28: - case "end": - return _context6.stop(); - } - }, _callee6, this, [[2, 6]]); - })); - function _import(_x5) { - return _import2.apply(this, arguments); - } - return _import; - }() - /** - * Imports documents from a NodeJS readable stream of JSONL. - */ - }, { - key: "importStream", - value: (function () { - var _importStream = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().mark(function _callee7(readableStream) { - var options, - resultsInJSONLFormat, - resultsInJSONFormat, - failedItems, - _args7 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().wrap(function _callee7$(_context7) { - while (1) switch (_context7.prev = _context7.next) { - case 0: - options = _args7.length > 1 && _args7[1] !== undefined ? _args7[1] : {}; - _context7.next = 3; - return this.apiCall.performRequest("post", this.endpointPath("import"), { - queryParameters: options, - bodyParameters: readableStream, - additionalHeaders: { - "Content-Type": "text/plain" - }, - skipConnectionTimeout: true, - // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully - enableKeepAlive: isNodeJSEnvironment ? true : false // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 - }); - case 3: - resultsInJSONLFormat = _context7.sent; - resultsInJSONFormat = resultsInJSONLFormat.split("\n").map(function (r) { - return JSON.parse(r); - }); - failedItems = resultsInJSONFormat.filter(function (r) { - return r.success === false; - }); - if (!(failedItems.length > 0)) { - _context7.next = 10; - break; - } - throw new _Errors__WEBPACK_IMPORTED_MODULE_7__.ImportError("".concat(resultsInJSONFormat.length - failedItems.length, " documents imported successfully, ").concat(failedItems.length, " documents failed during import. Use `error.importResults` from the raised exception to get a detailed error reason for each document."), resultsInJSONFormat, { - documentsInJSONLFormat: readableStream, - options: options, - failedItems: failedItems, - successCount: resultsInJSONFormat.length - failedItems.length - }); - case 10: - return _context7.abrupt("return", resultsInJSONFormat); - case 11: - case "end": - return _context7.stop(); - } - }, _callee7, this); - })); - function importStream(_x6) { - return _importStream.apply(this, arguments); - } - return importStream; - }() - /** - * Returns a JSONL string for all the documents in this collection - */ - ) - }, { - key: "export", - value: (function () { - var _export2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().mark(function _callee8() { - var options, - _args8 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().wrap(function _callee8$(_context8) { - while (1) switch (_context8.prev = _context8.next) { - case 0: - options = _args8.length > 0 && _args8[0] !== undefined ? _args8[0] : {}; - return _context8.abrupt("return", this.apiCall.get(this.endpointPath("export"), options)); - case 2: - case "end": - return _context8.stop(); - } - }, _callee8, this); - })); - function _export() { - return _export2.apply(this, arguments); - } - return _export; - }() - /** - * Returns a NodeJS readable stream of JSONL for all the documents in this collection. - */ - ) - }, { - key: "exportStream", - value: (function () { - var _exportStream = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().mark(function _callee9() { - var options, - _args9 = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default().wrap(function _callee9$(_context9) { - while (1) switch (_context9.prev = _context9.next) { - case 0: - options = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {}; - return _context9.abrupt("return", this.apiCall.get(this.endpointPath("export"), options, { - responseType: "stream" - })); - case 2: - case "end": - return _context9.stop(); - } - }, _callee9, this); - })); - function exportStream() { - return _exportStream.apply(this, arguments); - } - return exportStream; - }()) - }]); -}(_SearchOnlyDocuments__WEBPACK_IMPORTED_MODULE_8__.SearchOnlyDocuments); - - -/***/ }), - -/***/ "./src/Typesense/Errors/HTTPError.ts": -/*!*******************************************!*\ - !*** ./src/Typesense/Errors/HTTPError.ts ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ HTTPError) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"); -/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js"); -/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js"); -/* harmony import */ var _TypesenseError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TypesenseError */ "./src/Typesense/Errors/TypesenseError.ts"); - - - - - -function _callSuper(t, o, e) { return o = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(o), (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(t).constructor) : o.apply(t, e)); } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } - -var HTTPError = /*#__PURE__*/function (_TypesenseError) { - function HTTPError() { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, HTTPError); - return _callSuper(this, HTTPError, arguments); - } - (0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__["default"])(HTTPError, _TypesenseError); - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__["default"])(HTTPError); -}(_TypesenseError__WEBPACK_IMPORTED_MODULE_5__["default"]); - - -/***/ }), - -/***/ "./src/Typesense/Errors/ImportError.ts": -/*!*********************************************!*\ - !*** ./src/Typesense/Errors/ImportError.ts ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ ImportError) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"); -/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js"); -/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js"); -/* harmony import */ var _TypesenseError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TypesenseError */ "./src/Typesense/Errors/TypesenseError.ts"); - - - - - -function _callSuper(t, o, e) { return o = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(o), (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(t).constructor) : o.apply(t, e)); } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } - -var ImportError = /*#__PURE__*/function (_TypesenseError) { - function ImportError(message, importResults, payload) { - var _this; - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, ImportError); - _this = _callSuper(this, ImportError, [message]); - _this.importResults = importResults; - _this.payload = payload; - return _this; - } - (0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__["default"])(ImportError, _TypesenseError); - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__["default"])(ImportError); -}(_TypesenseError__WEBPACK_IMPORTED_MODULE_5__["default"]); - - -/***/ }), - -/***/ "./src/Typesense/Errors/MissingConfigurationError.ts": -/*!***********************************************************!*\ - !*** ./src/Typesense/Errors/MissingConfigurationError.ts ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ MissingConfigurationError) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"); -/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js"); -/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js"); -/* harmony import */ var _TypesenseError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TypesenseError */ "./src/Typesense/Errors/TypesenseError.ts"); - - - - - -function _callSuper(t, o, e) { return o = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(o), (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(t).constructor) : o.apply(t, e)); } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } - -var MissingConfigurationError = /*#__PURE__*/function (_TypesenseError) { - function MissingConfigurationError() { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, MissingConfigurationError); - return _callSuper(this, MissingConfigurationError, arguments); - } - (0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__["default"])(MissingConfigurationError, _TypesenseError); - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__["default"])(MissingConfigurationError); -}(_TypesenseError__WEBPACK_IMPORTED_MODULE_5__["default"]); - - -/***/ }), - -/***/ "./src/Typesense/Errors/ObjectAlreadyExists.ts": -/*!*****************************************************!*\ - !*** ./src/Typesense/Errors/ObjectAlreadyExists.ts ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ ObjectAlreadyExists) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"); -/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js"); -/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js"); -/* harmony import */ var _TypesenseError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TypesenseError */ "./src/Typesense/Errors/TypesenseError.ts"); - - - - - -function _callSuper(t, o, e) { return o = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(o), (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(t).constructor) : o.apply(t, e)); } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } - -var ObjectAlreadyExists = /*#__PURE__*/function (_TypesenseError) { - function ObjectAlreadyExists() { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, ObjectAlreadyExists); - return _callSuper(this, ObjectAlreadyExists, arguments); - } - (0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__["default"])(ObjectAlreadyExists, _TypesenseError); - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__["default"])(ObjectAlreadyExists); -}(_TypesenseError__WEBPACK_IMPORTED_MODULE_5__["default"]); - - -/***/ }), - -/***/ "./src/Typesense/Errors/ObjectNotFound.ts": -/*!************************************************!*\ - !*** ./src/Typesense/Errors/ObjectNotFound.ts ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ ObjectNotFound) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"); -/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js"); -/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js"); -/* harmony import */ var _TypesenseError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TypesenseError */ "./src/Typesense/Errors/TypesenseError.ts"); - - - - - -function _callSuper(t, o, e) { return o = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(o), (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(t).constructor) : o.apply(t, e)); } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } - -var ObjectNotFound = /*#__PURE__*/function (_TypesenseError) { - function ObjectNotFound() { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, ObjectNotFound); - return _callSuper(this, ObjectNotFound, arguments); - } - (0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__["default"])(ObjectNotFound, _TypesenseError); - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__["default"])(ObjectNotFound); -}(_TypesenseError__WEBPACK_IMPORTED_MODULE_5__["default"]); - - -/***/ }), - -/***/ "./src/Typesense/Errors/ObjectUnprocessable.ts": -/*!*****************************************************!*\ - !*** ./src/Typesense/Errors/ObjectUnprocessable.ts ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ ObjectUnprocessable) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"); -/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js"); -/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js"); -/* harmony import */ var _TypesenseError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TypesenseError */ "./src/Typesense/Errors/TypesenseError.ts"); - - - - - -function _callSuper(t, o, e) { return o = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(o), (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(t).constructor) : o.apply(t, e)); } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } - -var ObjectUnprocessable = /*#__PURE__*/function (_TypesenseError) { - function ObjectUnprocessable() { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, ObjectUnprocessable); - return _callSuper(this, ObjectUnprocessable, arguments); - } - (0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__["default"])(ObjectUnprocessable, _TypesenseError); - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__["default"])(ObjectUnprocessable); -}(_TypesenseError__WEBPACK_IMPORTED_MODULE_5__["default"]); - - -/***/ }), - -/***/ "./src/Typesense/Errors/RequestMalformed.ts": -/*!**************************************************!*\ - !*** ./src/Typesense/Errors/RequestMalformed.ts ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ RequestMalformed) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"); -/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js"); -/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js"); -/* harmony import */ var _TypesenseError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TypesenseError */ "./src/Typesense/Errors/TypesenseError.ts"); - - - - - -function _callSuper(t, o, e) { return o = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(o), (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(t).constructor) : o.apply(t, e)); } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } - -var RequestMalformed = /*#__PURE__*/function (_TypesenseError) { - function RequestMalformed() { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, RequestMalformed); - return _callSuper(this, RequestMalformed, arguments); - } - (0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__["default"])(RequestMalformed, _TypesenseError); - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__["default"])(RequestMalformed); -}(_TypesenseError__WEBPACK_IMPORTED_MODULE_5__["default"]); - - -/***/ }), - -/***/ "./src/Typesense/Errors/RequestUnauthorized.ts": -/*!*****************************************************!*\ - !*** ./src/Typesense/Errors/RequestUnauthorized.ts ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ RequestUnauthorized) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"); -/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js"); -/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js"); -/* harmony import */ var _TypesenseError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TypesenseError */ "./src/Typesense/Errors/TypesenseError.ts"); - - - - - -function _callSuper(t, o, e) { return o = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(o), (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(t).constructor) : o.apply(t, e)); } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } - -var RequestUnauthorized = /*#__PURE__*/function (_TypesenseError) { - function RequestUnauthorized() { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, RequestUnauthorized); - return _callSuper(this, RequestUnauthorized, arguments); - } - (0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__["default"])(RequestUnauthorized, _TypesenseError); - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__["default"])(RequestUnauthorized); -}(_TypesenseError__WEBPACK_IMPORTED_MODULE_5__["default"]); - - -/***/ }), - -/***/ "./src/Typesense/Errors/ServerError.ts": -/*!*********************************************!*\ - !*** ./src/Typesense/Errors/ServerError.ts ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ ServerError) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"); -/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js"); -/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js"); -/* harmony import */ var _TypesenseError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TypesenseError */ "./src/Typesense/Errors/TypesenseError.ts"); - - - - - -function _callSuper(t, o, e) { return o = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(o), (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(t).constructor) : o.apply(t, e)); } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } - -var ServerError = /*#__PURE__*/function (_TypesenseError) { - function ServerError() { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, ServerError); - return _callSuper(this, ServerError, arguments); - } - (0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__["default"])(ServerError, _TypesenseError); - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__["default"])(ServerError); -}(_TypesenseError__WEBPACK_IMPORTED_MODULE_5__["default"]); - - -/***/ }), - -/***/ "./src/Typesense/Errors/TypesenseError.ts": -/*!************************************************!*\ - !*** ./src/Typesense/Errors/TypesenseError.ts ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ TypesenseError) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"); -/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js"); -/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js"); -/* harmony import */ var _babel_runtime_helpers_wrapNativeSuper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/wrapNativeSuper */ "./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js"); - - - - - - -function _callSuper(t, o, e) { return o = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(o), (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(t).constructor) : o.apply(t, e)); } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -var TypesenseError = /*#__PURE__*/function (_Error) { - // Source: https://stackoverflow.com/a/58417721/123545 - function TypesenseError(message, httpBody, httpStatus) { - var _this; - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, TypesenseError); - _this = _callSuper(this, TypesenseError, [message]); - _this.name = (this instanceof TypesenseError ? this.constructor : void 0).name; - _this.httpBody = httpBody; - _this.httpStatus = httpStatus; - Object.setPrototypeOf(_this, (this instanceof TypesenseError ? this.constructor : void 0).prototype); - return _this; - } - (0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__["default"])(TypesenseError, _Error); - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_0__["default"])(TypesenseError); -}(/*#__PURE__*/(0,_babel_runtime_helpers_wrapNativeSuper__WEBPACK_IMPORTED_MODULE_5__["default"])(Error)); - - -/***/ }), - -/***/ "./src/Typesense/Errors/index.ts": -/*!***************************************!*\ - !*** ./src/Typesense/Errors/index.ts ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ HTTPError: () => (/* reexport safe */ _HTTPError__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ ImportError: () => (/* reexport safe */ _ImportError__WEBPACK_IMPORTED_MODULE_8__["default"]), -/* harmony export */ MissingConfigurationError: () => (/* reexport safe */ _MissingConfigurationError__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ ObjectAlreadyExists: () => (/* reexport safe */ _ObjectAlreadyExists__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ ObjectNotFound: () => (/* reexport safe */ _ObjectNotFound__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ ObjectUnprocessable: () => (/* reexport safe */ _ObjectUnprocessable__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ RequestMalformed: () => (/* reexport safe */ _RequestMalformed__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ RequestUnauthorized: () => (/* reexport safe */ _RequestUnauthorized__WEBPACK_IMPORTED_MODULE_6__["default"]), -/* harmony export */ ServerError: () => (/* reexport safe */ _ServerError__WEBPACK_IMPORTED_MODULE_7__["default"]), -/* harmony export */ TypesenseError: () => (/* reexport safe */ _TypesenseError__WEBPACK_IMPORTED_MODULE_9__["default"]) -/* harmony export */ }); -/* harmony import */ var _HTTPError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./HTTPError */ "./src/Typesense/Errors/HTTPError.ts"); -/* harmony import */ var _MissingConfigurationError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MissingConfigurationError */ "./src/Typesense/Errors/MissingConfigurationError.ts"); -/* harmony import */ var _ObjectAlreadyExists__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ObjectAlreadyExists */ "./src/Typesense/Errors/ObjectAlreadyExists.ts"); -/* harmony import */ var _ObjectNotFound__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ObjectNotFound */ "./src/Typesense/Errors/ObjectNotFound.ts"); -/* harmony import */ var _ObjectUnprocessable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ObjectUnprocessable */ "./src/Typesense/Errors/ObjectUnprocessable.ts"); -/* harmony import */ var _RequestMalformed__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./RequestMalformed */ "./src/Typesense/Errors/RequestMalformed.ts"); -/* harmony import */ var _RequestUnauthorized__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./RequestUnauthorized */ "./src/Typesense/Errors/RequestUnauthorized.ts"); -/* harmony import */ var _ServerError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ServerError */ "./src/Typesense/Errors/ServerError.ts"); -/* harmony import */ var _ImportError__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ImportError */ "./src/Typesense/Errors/ImportError.ts"); -/* harmony import */ var _TypesenseError__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./TypesenseError */ "./src/Typesense/Errors/TypesenseError.ts"); - - - - - - - - - - - - -/***/ }), - -/***/ "./src/Typesense/Health.ts": -/*!*********************************!*\ - !*** ./src/Typesense/Health.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Health) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); - - - - -var RESOURCEPATH = "/health"; -var Health = /*#__PURE__*/function () { - function Health(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Health); - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Health, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(RESOURCEPATH)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Key.ts": -/*!******************************!*\ - !*** ./src/Typesense/Key.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Key) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _Keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Keys */ "./src/Typesense/Keys.ts"); - - - - - -var Key = /*#__PURE__*/function () { - function Key(id, apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Key); - this.id = id; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Key, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.delete(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function _delete() { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "endpointPath", - value: function endpointPath() { - return "".concat(_Keys__WEBPACK_IMPORTED_MODULE_4__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Keys.ts": -/*!*******************************!*\ - !*** ./src/Typesense/Keys.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Keys) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! crypto */ "?4bf0"); -/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(crypto__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Utils */ "./src/Typesense/Utils.ts"); - - - - - - -var RESOURCEPATH = "/keys"; -var Keys = /*#__PURE__*/function () { - function Keys(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Keys); - this.apiCall = apiCall; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Keys, [{ - key: "create", - value: function () { - var _create = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(params) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.post(Keys.RESOURCEPATH, params)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function create(_x) { - return _create.apply(this, arguments); - } - return create; - }() - }, { - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.get(RESOURCEPATH)); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "generateScopedSearchKey", - value: function generateScopedSearchKey(searchKey, parameters) { - // Note: only a key generated with the `documents:search` action will be - // accepted by the server, when usined with the search endpoint. - var normalizedParams = (0,_Utils__WEBPACK_IMPORTED_MODULE_5__.normalizeArrayableParams)(parameters); - var paramsJSON = JSON.stringify(normalizedParams); - var digest = Buffer.from((0,crypto__WEBPACK_IMPORTED_MODULE_4__.createHmac)("sha256", searchKey).update(paramsJSON).digest("base64")); - var keyPrefix = searchKey.substr(0, 4); - var rawScopedKey = "".concat(digest).concat(keyPrefix).concat(paramsJSON); - return Buffer.from(rawScopedKey).toString("base64"); - } - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Metrics.ts": -/*!**********************************!*\ - !*** ./src/Typesense/Metrics.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Metrics) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); - - - - -var RESOURCEPATH = "/metrics.json"; -var Metrics = /*#__PURE__*/function () { - function Metrics(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Metrics); - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Metrics, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(RESOURCEPATH)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/MultiSearch.ts": -/*!**************************************!*\ - !*** ./src/Typesense/MultiSearch.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ MultiSearch) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js"); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _RequestWithCache__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./RequestWithCache */ "./src/Typesense/RequestWithCache.ts"); -/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Utils */ "./src/Typesense/Utils.ts"); - - - - - -function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } -function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } - - -var RESOURCEPATH = "/multi_search"; -var MultiSearch = /*#__PURE__*/function () { - function MultiSearch(apiCall, configuration) { - var useTextContentType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__["default"])(this, MultiSearch); - this.apiCall = apiCall; - this.configuration = configuration; - this.useTextContentType = useTextContentType; - this.requestWithCache = new _RequestWithCache__WEBPACK_IMPORTED_MODULE_5__["default"](); - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__["default"])(MultiSearch, [{ - key: "clearCache", - value: function clearCache() { - this.requestWithCache.clearCache(); - } - }, { - key: "perform", - value: function () { - var _perform = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(searchRequests) { - var commonParams, - _ref, - _ref$cacheSearchResul, - cacheSearchResultsForSeconds, - additionalHeaders, - additionalQueryParams, - queryParams, - normalizedSearchRequests, - normalizedQueryParams, - _args = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - commonParams = _args.length > 1 && _args[1] !== undefined ? _args[1] : {}; - _ref = _args.length > 2 && _args[2] !== undefined ? _args[2] : {}, _ref$cacheSearchResul = _ref.cacheSearchResultsForSeconds, cacheSearchResultsForSeconds = _ref$cacheSearchResul === void 0 ? this.configuration.cacheSearchResultsForSeconds : _ref$cacheSearchResul; - additionalHeaders = {}; - if (this.useTextContentType) { - additionalHeaders["content-type"] = "text/plain"; - } - additionalQueryParams = {}; - if (this.configuration.useServerSideSearchCache === true) { - additionalQueryParams["use_cache"] = true; - } - queryParams = _objectSpread(_objectSpread({}, commonParams), additionalQueryParams); - normalizedSearchRequests = { - searches: searchRequests.searches.map(_Utils__WEBPACK_IMPORTED_MODULE_6__.normalizeArrayableParams) - }; - normalizedQueryParams = (0,_Utils__WEBPACK_IMPORTED_MODULE_6__.normalizeArrayableParams)(queryParams); - return _context.abrupt("return", this.requestWithCache.perform(this.apiCall, this.apiCall.post, [RESOURCEPATH, normalizedSearchRequests, normalizedQueryParams, additionalHeaders], { - cacheResponseForSeconds: cacheSearchResultsForSeconds - })); - case 10: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function perform(_x) { - return _perform.apply(this, arguments); - } - return perform; - }() - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Operations.ts": -/*!*************************************!*\ - !*** ./src/Typesense/Operations.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Operations) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); - - - - -var RESOURCEPATH = "/operations"; -var Operations = /*#__PURE__*/function () { - function Operations(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Operations); - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Operations, [{ - key: "perform", - value: function () { - var _perform = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee( - // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}` - operationName) { - var queryParameters, - _args = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - queryParameters = _args.length > 1 && _args[1] !== undefined ? _args[1] : {}; - return _context.abrupt("return", this.apiCall.post("".concat(RESOURCEPATH, "/").concat(operationName), {}, queryParameters)); - case 2: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function perform(_x) { - return _perform.apply(this, arguments); - } - return perform; - }() - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Override.ts": -/*!***********************************!*\ - !*** ./src/Typesense/Override.ts ***! - \***********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Override) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _Collections__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Collections */ "./src/Typesense/Collections.ts"); -/* harmony import */ var _Overrides__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Overrides */ "./src/Typesense/Overrides.ts"); - - - - - - -var Override = /*#__PURE__*/function () { - function Override(collectionName, overrideId, apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Override); - this.collectionName = collectionName; - this.overrideId = overrideId; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Override, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.delete(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function _delete() { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "endpointPath", - value: function endpointPath() { - return "".concat(_Collections__WEBPACK_IMPORTED_MODULE_4__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(_Overrides__WEBPACK_IMPORTED_MODULE_5__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.overrideId)); - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Overrides.ts": -/*!************************************!*\ - !*** ./src/Typesense/Overrides.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Overrides) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _Collections__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Collections */ "./src/Typesense/Collections.ts"); - - - - - -var RESOURCEPATH = "/overrides"; -var Overrides = /*#__PURE__*/function () { - function Overrides(collectionName, apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Overrides); - this.collectionName = collectionName; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Overrides, [{ - key: "upsert", - value: function () { - var _upsert = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(overrideId, params) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.put(this.endpointPath(overrideId), params)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function upsert(_x, _x2) { - return _upsert.apply(this, arguments); - } - return upsert; - }() - }, { - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "endpointPath", - value: function endpointPath(operation) { - return "".concat(_Collections__WEBPACK_IMPORTED_MODULE_4__["default"].RESOURCEPATH, "/").concat(this.collectionName).concat(Overrides.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - } - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Preset.ts": -/*!*********************************!*\ - !*** ./src/Typesense/Preset.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Preset) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _Presets__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Presets */ "./src/Typesense/Presets.ts"); - - - - - -var Preset = /*#__PURE__*/function () { - function Preset(presetId, apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Preset); - this.presetId = presetId; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Preset, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.delete(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function _delete() { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "endpointPath", - value: function endpointPath() { - return "".concat(_Presets__WEBPACK_IMPORTED_MODULE_4__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.presetId)); - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Presets.ts": -/*!**********************************!*\ - !*** ./src/Typesense/Presets.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Presets) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js"); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Utils */ "./src/Typesense/Utils.ts"); - - - - - - -var RESOURCEPATH = "/presets"; -var Presets = /*#__PURE__*/function () { - function Presets(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__["default"])(this, Presets); - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__["default"])(Presets, [{ - key: "upsert", - value: function () { - var _upsert = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(presetId, params) { - var _normalizedParams, normalizedParams; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - if (!((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(params.value) === "object" && "searches" in params.value)) { - _context.next = 3; - break; - } - _normalizedParams = params.value.searches.map(function (search) { - return (0,_Utils__WEBPACK_IMPORTED_MODULE_5__.normalizeArrayableParams)(search); - }); - return _context.abrupt("return", this.apiCall.put(this.endpointPath(presetId), { - value: { - searches: _normalizedParams - } - })); - case 3: - normalizedParams = (0,_Utils__WEBPACK_IMPORTED_MODULE_5__.normalizeArrayableParams)(params.value); - return _context.abrupt("return", this.apiCall.put(this.endpointPath(presetId), { - value: normalizedParams - })); - case 5: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function upsert(_x, _x2) { - return _upsert.apply(this, arguments); - } - return upsert; - }() - }, { - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "endpointPath", - value: function endpointPath(operation) { - return "".concat(Presets.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - } - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/RequestWithCache.ts": -/*!*******************************************!*\ - !*** ./src/Typesense/RequestWithCache.ts ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ RequestWithCache) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5__); - - - - - - -var defaultCacheResponseForSeconds = 2 * 60; -var defaultMaxSize = 100; -var RequestWithCache = /*#__PURE__*/function () { - function RequestWithCache() { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__["default"])(this, RequestWithCache); - (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])(this, "responseCache", new Map()); - (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])(this, "responsePromiseCache", new Map()); - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__["default"])(RequestWithCache, [{ - key: "clearCache", - value: function clearCache() { - this.responseCache = new Map(); - this.responsePromiseCache = new Map(); - } - - // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way - }, { - key: "perform", - value: function () { - var _perform = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee(requestContext, requestFunction, requestFunctionArguments, cacheOptions) { - var _cacheOptions$cacheRe, cacheResponseForSeconds, _cacheOptions$maxSize, maxSize, isCacheDisabled, requestFunctionArgumentsJSON, cacheEntry, now, isEntryValid, cachePromiseEntry, _isEntryValid, responsePromise, response, isCacheOverMaxSize, oldestEntry, isResponsePromiseCacheOverMaxSize, _oldestEntry; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - _cacheOptions$cacheRe = cacheOptions.cacheResponseForSeconds, cacheResponseForSeconds = _cacheOptions$cacheRe === void 0 ? defaultCacheResponseForSeconds : _cacheOptions$cacheRe, _cacheOptions$maxSize = cacheOptions.maxSize, maxSize = _cacheOptions$maxSize === void 0 ? defaultMaxSize : _cacheOptions$maxSize; - isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0; - if (!isCacheDisabled) { - _context.next = 4; - break; - } - return _context.abrupt("return", requestFunction.call.apply(requestFunction, [requestContext].concat((0,_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(requestFunctionArguments)))); - case 4: - requestFunctionArgumentsJSON = JSON.stringify(requestFunctionArguments); - cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON); - now = Date.now(); - if (!cacheEntry) { - _context.next = 16; - break; - } - isEntryValid = now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000; - if (!isEntryValid) { - _context.next = 15; - break; - } - this.responseCache.delete(requestFunctionArgumentsJSON); - this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry); - return _context.abrupt("return", Promise.resolve(cacheEntry.response)); - case 15: - this.responseCache.delete(requestFunctionArgumentsJSON); - case 16: - cachePromiseEntry = this.responsePromiseCache.get(requestFunctionArgumentsJSON); - if (!cachePromiseEntry) { - _context.next = 26; - break; - } - _isEntryValid = now - cachePromiseEntry.requestTimestamp < cacheResponseForSeconds * 1000; - if (!_isEntryValid) { - _context.next = 25; - break; - } - this.responsePromiseCache.delete(requestFunctionArgumentsJSON); - this.responsePromiseCache.set(requestFunctionArgumentsJSON, cachePromiseEntry); - return _context.abrupt("return", cachePromiseEntry.responsePromise); - case 25: - this.responsePromiseCache.delete(requestFunctionArgumentsJSON); - case 26: - responsePromise = requestFunction.call.apply(requestFunction, [requestContext].concat((0,_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(requestFunctionArguments))); - this.responsePromiseCache.set(requestFunctionArgumentsJSON, { - requestTimestamp: now, - responsePromise: responsePromise - }); - _context.next = 30; - return responsePromise; - case 30: - response = _context.sent; - this.responseCache.set(requestFunctionArgumentsJSON, { - requestTimestamp: now, - response: response - }); - isCacheOverMaxSize = this.responseCache.size > maxSize; - if (isCacheOverMaxSize) { - oldestEntry = this.responseCache.keys().next().value; - if (oldestEntry) { - this.responseCache.delete(oldestEntry); - } - } - isResponsePromiseCacheOverMaxSize = this.responsePromiseCache.size > maxSize; - if (isResponsePromiseCacheOverMaxSize) { - _oldestEntry = this.responsePromiseCache.keys().next().value; - if (_oldestEntry) { - this.responsePromiseCache.delete(_oldestEntry); - } - } - return _context.abrupt("return", response); - case 37: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function perform(_x, _x2, _x3, _x4) { - return _perform.apply(this, arguments); - } - return perform; - }() - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/SearchClient.ts": -/*!***************************************!*\ - !*** ./src/Typesense/SearchClient.ts ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ SearchClient) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _Configuration__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Configuration */ "./src/Typesense/Configuration.ts"); -/* harmony import */ var _ApiCall__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ApiCall */ "./src/Typesense/ApiCall.ts"); -/* harmony import */ var _MultiSearch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./MultiSearch */ "./src/Typesense/MultiSearch.ts"); -/* harmony import */ var _SearchOnlyCollection__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./SearchOnlyCollection */ "./src/Typesense/SearchOnlyCollection.ts"); - - - - - - - -var SearchClient = /*#__PURE__*/function () { - function SearchClient(options) { - var _options$sendApiKeyAs; - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, SearchClient); - options.sendApiKeyAsQueryParam = (_options$sendApiKeyAs = options.sendApiKeyAsQueryParam) !== null && _options$sendApiKeyAs !== void 0 ? _options$sendApiKeyAs : true; - if (options.sendApiKeyAsQueryParam === true && (options.apiKey || "").length > 2000) { - console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."); - options.sendApiKeyAsQueryParam = false; - } - this.configuration = new _Configuration__WEBPACK_IMPORTED_MODULE_3__["default"](options); - this.apiCall = new _ApiCall__WEBPACK_IMPORTED_MODULE_4__["default"](this.configuration); - this.multiSearch = new _MultiSearch__WEBPACK_IMPORTED_MODULE_5__["default"](this.apiCall, this.configuration, true); - this.individualCollections = {}; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(SearchClient, [{ - key: "clearCache", - value: function clearCache() { - this.multiSearch.clearCache(); - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - Object.entries(this.individualCollections).forEach(function (_ref) { - var _ref2 = (0,_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, 2), - _ = _ref2[0], - collection = _ref2[1]; - collection.documents().clearCache(); - }); - } - }, { - key: "collections", - value: function collections(collectionName) { - if (!collectionName) { - throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to " + "be searched must be specified. Use Typesense.Client if you need to access the collection object."); - } else { - if (this.individualCollections[collectionName] === undefined) { - this.individualCollections[collectionName] = new _SearchOnlyCollection__WEBPACK_IMPORTED_MODULE_6__.SearchOnlyCollection(collectionName, this.apiCall, this.configuration); - } - return this.individualCollections[collectionName]; - } - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/SearchOnlyCollection.ts": -/*!***********************************************!*\ - !*** ./src/Typesense/SearchOnlyCollection.ts ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ SearchOnlyCollection: () => (/* binding */ SearchOnlyCollection) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _SearchOnlyDocuments__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SearchOnlyDocuments */ "./src/Typesense/SearchOnlyDocuments.ts"); - - - -var SearchOnlyCollection = /*#__PURE__*/function () { - function SearchOnlyCollection(name, apiCall, configuration) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__["default"])(this, SearchOnlyCollection); - this.name = name; - this.apiCall = apiCall; - this.configuration = configuration; - this._documents = new _SearchOnlyDocuments__WEBPACK_IMPORTED_MODULE_2__.SearchOnlyDocuments(this.name, this.apiCall, this.configuration); - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__["default"])(SearchOnlyCollection, [{ - key: "documents", - value: function documents() { - return this._documents; - } - }]); -}(); - -/***/ }), - -/***/ "./src/Typesense/SearchOnlyDocuments.ts": -/*!**********************************************!*\ - !*** ./src/Typesense/SearchOnlyDocuments.ts ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ SearchOnlyDocuments: () => (/* binding */ SearchOnlyDocuments) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _RequestWithCache__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./RequestWithCache */ "./src/Typesense/RequestWithCache.ts"); -/* harmony import */ var _Collections__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Collections */ "./src/Typesense/Collections.ts"); -/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Utils */ "./src/Typesense/Utils.ts"); - - - - - - - - -var RESOURCEPATH = "/documents"; -var SearchOnlyDocuments = /*#__PURE__*/function () { - function SearchOnlyDocuments(collectionName, apiCall, configuration) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, SearchOnlyDocuments); - (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__["default"])(this, "requestWithCache", new _RequestWithCache__WEBPACK_IMPORTED_MODULE_5__["default"]()); - this.collectionName = collectionName; - this.apiCall = apiCall; - this.configuration = configuration; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(SearchOnlyDocuments, [{ - key: "clearCache", - value: function clearCache() { - this.requestWithCache.clearCache(); - } - }, { - key: "search", - value: function () { - var _search = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(searchParameters) { - var _ref, - _ref$cacheSearchResul, - cacheSearchResultsForSeconds, - _ref$abortSignal, - abortSignal, - additionalQueryParams, - normalizedParams, - queryParams, - _args = arguments; - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - _ref = _args.length > 1 && _args[1] !== undefined ? _args[1] : {}, _ref$cacheSearchResul = _ref.cacheSearchResultsForSeconds, cacheSearchResultsForSeconds = _ref$cacheSearchResul === void 0 ? this.configuration.cacheSearchResultsForSeconds : _ref$cacheSearchResul, _ref$abortSignal = _ref.abortSignal, abortSignal = _ref$abortSignal === void 0 ? null : _ref$abortSignal; - additionalQueryParams = {}; - if (this.configuration.useServerSideSearchCache === true) { - additionalQueryParams["use_cache"] = true; - } - normalizedParams = (0,_Utils__WEBPACK_IMPORTED_MODULE_7__.normalizeArrayableParams)(searchParameters); - queryParams = Object.assign({}, additionalQueryParams, normalizedParams); - return _context.abrupt("return", this.requestWithCache.perform(this.apiCall, this.apiCall.get, [this.endpointPath("search"), queryParams, { - abortSignal: abortSignal - }], { - cacheResponseForSeconds: cacheSearchResultsForSeconds - })); - case 6: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function search(_x) { - return _search.apply(this, arguments); - } - return search; - }() - }, { - key: "endpointPath", - value: function endpointPath(operation) { - return "".concat(_Collections__WEBPACK_IMPORTED_MODULE_6__["default"].RESOURCEPATH, "/").concat(this.collectionName).concat(RESOURCEPATH).concat(operation === undefined ? "" : "/" + operation); - } - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - -/***/ }), - -/***/ "./src/Typesense/Stats.ts": -/*!********************************!*\ - !*** ./src/Typesense/Stats.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Metrics) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); - - - - -var RESOURCEPATH = "/stats.json"; -var Metrics = /*#__PURE__*/function () { - function Metrics(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Metrics); - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Metrics, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(RESOURCEPATH)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Stopword.ts": -/*!***********************************!*\ - !*** ./src/Typesense/Stopword.ts ***! - \***********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Stopword) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _Stopwords__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Stopwords */ "./src/Typesense/Stopwords.ts"); - - - - - -var Stopword = /*#__PURE__*/function () { - function Stopword(stopwordId, apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Stopword); - this.stopwordId = stopwordId; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Stopword, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.delete(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function _delete() { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "endpointPath", - value: function endpointPath() { - return "".concat(_Stopwords__WEBPACK_IMPORTED_MODULE_4__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.stopwordId)); - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Stopwords.ts": -/*!************************************!*\ - !*** ./src/Typesense/Stopwords.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Stopwords) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); - - - - -var RESOURCEPATH = "/stopwords"; -var Stopwords = /*#__PURE__*/function () { - function Stopwords(apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Stopwords); - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Stopwords, [{ - key: "upsert", - value: function () { - var _upsert = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(stopwordId, params) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.put(this.endpointPath(stopwordId), params)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function upsert(_x, _x2) { - return _upsert.apply(this, arguments); - } - return upsert; - }() - }, { - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "endpointPath", - value: function endpointPath(operation) { - return "".concat(Stopwords.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - } - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Synonym.ts": -/*!**********************************!*\ - !*** ./src/Typesense/Synonym.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Synonym) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _Collections__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Collections */ "./src/Typesense/Collections.ts"); -/* harmony import */ var _Synonyms__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Synonyms */ "./src/Typesense/Synonyms.ts"); - - - - - - -var Synonym = /*#__PURE__*/function () { - function Synonym(collectionName, synonymId, apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Synonym); - this.collectionName = collectionName; - this.synonymId = synonymId; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Synonym, [{ - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "delete", - value: function () { - var _delete2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.delete(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function _delete() { - return _delete2.apply(this, arguments); - } - return _delete; - }() - }, { - key: "endpointPath", - value: function endpointPath() { - return "".concat(_Collections__WEBPACK_IMPORTED_MODULE_4__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(_Synonyms__WEBPACK_IMPORTED_MODULE_5__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.synonymId)); - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Synonyms.ts": -/*!***********************************!*\ - !*** ./src/Typesense/Synonyms.ts ***! - \***********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Synonyms) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); -/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); -/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); -/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _Collections__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Collections */ "./src/Typesense/Collections.ts"); - - - - - -var RESOURCEPATH = "/synonyms"; -var Synonyms = /*#__PURE__*/function () { - function Synonyms(collectionName, apiCall) { - (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, Synonyms); - this.collectionName = collectionName; - this.apiCall = apiCall; - } - return (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__["default"])(Synonyms, [{ - key: "upsert", - value: function () { - var _upsert = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(synonymId, params) { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", this.apiCall.put(this.endpointPath(synonymId), params)); - case 1: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function upsert(_x, _x2) { - return _upsert.apply(this, arguments); - } - return upsert; - }() - }, { - key: "retrieve", - value: function () { - var _retrieve = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2() { - return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.apiCall.get(this.endpointPath())); - case 1: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function retrieve() { - return _retrieve.apply(this, arguments); - } - return retrieve; - }() - }, { - key: "endpointPath", - value: function endpointPath(operation) { - return "".concat(_Collections__WEBPACK_IMPORTED_MODULE_4__["default"].RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Synonyms.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - } - }], [{ - key: "RESOURCEPATH", - get: function get() { - return RESOURCEPATH; - } - }]); -}(); - - -/***/ }), - -/***/ "./src/Typesense/Utils.ts": -/*!********************************!*\ - !*** ./src/Typesense/Utils.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ normalizeArrayableParams: () => (/* binding */ normalizeArrayableParams) -/* harmony export */ }); -/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js"); -/* harmony import */ var _Documents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Documents */ "./src/Typesense/Documents.ts"); - -function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } -function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } - -function hasNoArrayValues(params) { - return Object.keys(_Documents__WEBPACK_IMPORTED_MODULE_1__.arrayableParams).filter(function (key) { - return params[key] !== undefined; - }).every(function (key) { - return isNonArrayValue(params[key]); - }); -} -function normalizeArrayableParams(params) { - var result = _objectSpread({}, params); - var transformedValues = Object.keys(_Documents__WEBPACK_IMPORTED_MODULE_1__.arrayableParams).filter(function (key) { - return Array.isArray(result[key]); - }).map(function (key) { - result[key] = result[key].join(","); - return key; - }); - if (!transformedValues.length && hasNoArrayValues(result)) { - return result; - } - if (!hasNoArrayValues(result)) { - throw new Error("Failed to normalize arrayable params: ".concat(JSON.stringify(result))); - } - return result; -} -function isNonArrayValue(value) { - return !Array.isArray(value); -} - -/***/ }), - -/***/ "./node_modules/loglevel/lib/loglevel.js": -/*!***********************************************!*\ - !*** ./node_modules/loglevel/lib/loglevel.js ***! - \***********************************************/ -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/* -* loglevel - https://github.com/pimterry/loglevel -* -* Copyright (c) 2013 Tim Perry -* Licensed under the MIT license. -*/ -(function (root, definition) { - "use strict"; - if (true) { - !(__WEBPACK_AMD_DEFINE_FACTORY__ = (definition), - __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? - (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : - __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else {} -}(this, function () { - "use strict"; - - // Slightly dubious tricks to cut down minimized file size - var noop = function() {}; - var undefinedType = "undefined"; - var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && ( - /Trident\/|MSIE /.test(window.navigator.userAgent) - ); - - var logMethods = [ - "trace", - "debug", - "info", - "warn", - "error" - ]; - - var _loggersByName = {}; - var defaultLogger = null; - - // Cross-browser bind equivalent that works at least back to IE6 - function bindMethod(obj, methodName) { - var method = obj[methodName]; - if (typeof method.bind === 'function') { - return method.bind(obj); - } else { - try { - return Function.prototype.bind.call(method, obj); - } catch (e) { - // Missing bind shim or IE8 + Modernizr, fallback to wrapping - return function() { - return Function.prototype.apply.apply(method, [obj, arguments]); - }; - } - } - } - - // Trace() doesn't print the message in IE, so for that case we need to wrap it - function traceForIE() { - if (console.log) { - if (console.log.apply) { - console.log.apply(console, arguments); - } else { - // In old IE, native console methods themselves don't have apply(). - Function.prototype.apply.apply(console.log, [console, arguments]); - } - } - if (console.trace) console.trace(); - } - - // Build the best logging method possible for this env - // Wherever possible we want to bind, not wrap, to preserve stack traces - function realMethod(methodName) { - if (methodName === 'debug') { - methodName = 'log'; - } - - if (typeof console === undefinedType) { - return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives - } else if (methodName === 'trace' && isIE) { - return traceForIE; - } else if (console[methodName] !== undefined) { - return bindMethod(console, methodName); - } else if (console.log !== undefined) { - return bindMethod(console, 'log'); - } else { - return noop; - } - } - - // These private functions always need `this` to be set properly - - function replaceLoggingMethods() { - /*jshint validthis:true */ - var level = this.getLevel(); - - // Replace the actual methods. - for (var i = 0; i < logMethods.length; i++) { - var methodName = logMethods[i]; - this[methodName] = (i < level) ? - noop : - this.methodFactory(methodName, level, this.name); - } - - // Define log.log as an alias for log.debug - this.log = this.debug; - - // Return any important warnings. - if (typeof console === undefinedType && level < this.levels.SILENT) { - return "No console available for logging"; - } - } - - // In old IE versions, the console isn't present until you first open it. - // We build realMethod() replacements here that regenerate logging methods - function enableLoggingWhenConsoleArrives(methodName) { - return function () { - if (typeof console !== undefinedType) { - replaceLoggingMethods.call(this); - this[methodName].apply(this, arguments); - } - }; - } - - // By default, we use closely bound real methods wherever possible, and - // otherwise we wait for a console to appear, and then try again. - function defaultMethodFactory(methodName, _level, _loggerName) { - /*jshint validthis:true */ - return realMethod(methodName) || - enableLoggingWhenConsoleArrives.apply(this, arguments); - } - - function Logger(name, factory) { - // Private instance variables. - var self = this; - /** - * The level inherited from a parent logger (or a global default). We - * cache this here rather than delegating to the parent so that it stays - * in sync with the actual logging methods that we have installed (the - * parent could change levels but we might not have rebuilt the loggers - * in this child yet). - * @type {number} - */ - var inheritedLevel; - /** - * The default level for this logger, if any. If set, this overrides - * `inheritedLevel`. - * @type {number|null} - */ - var defaultLevel; - /** - * A user-specific level for this logger. If set, this overrides - * `defaultLevel`. - * @type {number|null} - */ - var userLevel; - - var storageKey = "loglevel"; - if (typeof name === "string") { - storageKey += ":" + name; - } else if (typeof name === "symbol") { - storageKey = undefined; - } - - function persistLevelIfPossible(levelNum) { - var levelName = (logMethods[levelNum] || 'silent').toUpperCase(); - - if (typeof window === undefinedType || !storageKey) return; - - // Use localStorage if available - try { - window.localStorage[storageKey] = levelName; - return; - } catch (ignore) {} - - // Use session cookie as fallback - try { - window.document.cookie = - encodeURIComponent(storageKey) + "=" + levelName + ";"; - } catch (ignore) {} - } - - function getPersistedLevel() { - var storedLevel; - - if (typeof window === undefinedType || !storageKey) return; - - try { - storedLevel = window.localStorage[storageKey]; - } catch (ignore) {} - - // Fallback to cookies if local storage gives us nothing - if (typeof storedLevel === undefinedType) { - try { - var cookie = window.document.cookie; - var cookieName = encodeURIComponent(storageKey); - var location = cookie.indexOf(cookieName + "="); - if (location !== -1) { - storedLevel = /^([^;]+)/.exec( - cookie.slice(location + cookieName.length + 1) - )[1]; - } - } catch (ignore) {} - } - - // If the stored level is not valid, treat it as if nothing was stored. - if (self.levels[storedLevel] === undefined) { - storedLevel = undefined; - } - - return storedLevel; - } - - function clearPersistedLevel() { - if (typeof window === undefinedType || !storageKey) return; - - // Use localStorage if available - try { - window.localStorage.removeItem(storageKey); - } catch (ignore) {} - - // Use session cookie as fallback - try { - window.document.cookie = - encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC"; - } catch (ignore) {} - } - - function normalizeLevel(input) { - var level = input; - if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) { - level = self.levels[level.toUpperCase()]; - } - if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) { - return level; - } else { - throw new TypeError("log.setLevel() called with invalid level: " + input); - } - } - - /* - * - * Public logger API - see https://github.com/pimterry/loglevel for details - * - */ - - self.name = name; - - self.levels = { "TRACE": 0, "DEBUG": 1, "INFO": 2, "WARN": 3, - "ERROR": 4, "SILENT": 5}; - - self.methodFactory = factory || defaultMethodFactory; - - self.getLevel = function () { - if (userLevel != null) { - return userLevel; - } else if (defaultLevel != null) { - return defaultLevel; - } else { - return inheritedLevel; - } - }; - - self.setLevel = function (level, persist) { - userLevel = normalizeLevel(level); - if (persist !== false) { // defaults to true - persistLevelIfPossible(userLevel); - } - - // NOTE: in v2, this should call rebuild(), which updates children. - return replaceLoggingMethods.call(self); - }; - - self.setDefaultLevel = function (level) { - defaultLevel = normalizeLevel(level); - if (!getPersistedLevel()) { - self.setLevel(level, false); - } - }; - - self.resetLevel = function () { - userLevel = null; - clearPersistedLevel(); - replaceLoggingMethods.call(self); - }; - - self.enableAll = function(persist) { - self.setLevel(self.levels.TRACE, persist); - }; - - self.disableAll = function(persist) { - self.setLevel(self.levels.SILENT, persist); - }; - - self.rebuild = function () { - if (defaultLogger !== self) { - inheritedLevel = normalizeLevel(defaultLogger.getLevel()); - } - replaceLoggingMethods.call(self); - - if (defaultLogger === self) { - for (var childName in _loggersByName) { - _loggersByName[childName].rebuild(); - } - } - }; - - // Initialize all the internal levels. - inheritedLevel = normalizeLevel( - defaultLogger ? defaultLogger.getLevel() : "WARN" - ); - var initialLevel = getPersistedLevel(); - if (initialLevel != null) { - userLevel = normalizeLevel(initialLevel); - } - replaceLoggingMethods.call(self); - } - - /* - * - * Top-level API - * - */ - - defaultLogger = new Logger(); - - defaultLogger.getLogger = function getLogger(name) { - if ((typeof name !== "symbol" && typeof name !== "string") || name === "") { - throw new TypeError("You must supply a name when creating a logger."); - } - - var logger = _loggersByName[name]; - if (!logger) { - logger = _loggersByName[name] = new Logger( - name, - defaultLogger.methodFactory - ); - } - return logger; - }; - - // Grab the current global log variable in case of overwrite - var _log = (typeof window !== undefinedType) ? window.log : undefined; - defaultLogger.noConflict = function() { - if (typeof window !== undefinedType && - window.log === defaultLogger) { - window.log = _log; - } - - return defaultLogger; - }; - - defaultLogger.getLoggers = function getLoggers() { - return _loggersByName; - }; - - // ES6 default export, for compatibility - defaultLogger['default'] = defaultLogger; - - return defaultLogger; -})); - - -/***/ }), - -/***/ "?4bf0": -/*!************************!*\ - !*** crypto (ignored) ***! - \************************/ -/***/ (() => { - -/* (ignored) */ - -/***/ }), - -/***/ "?e89d": -/*!**********************!*\ - !*** http (ignored) ***! - \**********************/ -/***/ (() => { - -/* (ignored) */ - -/***/ }), - -/***/ "?77e4": -/*!***********************!*\ - !*** https (ignored) ***! - \***********************/ -/***/ (() => { - -/* (ignored) */ - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/regeneratorRuntime.js": -/*!*******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/regeneratorRuntime.js ***! - \*******************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var _typeof = (__webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/typeof.js")["default"]); -function _regeneratorRuntime() { - "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ - module.exports = _regeneratorRuntime = function _regeneratorRuntime() { - return e; - }, module.exports.__esModule = true, module.exports["default"] = module.exports; - var t, - e = {}, - r = Object.prototype, - n = r.hasOwnProperty, - o = Object.defineProperty || function (t, e, r) { - t[e] = r.value; - }, - i = "function" == typeof Symbol ? Symbol : {}, - a = i.iterator || "@@iterator", - c = i.asyncIterator || "@@asyncIterator", - u = i.toStringTag || "@@toStringTag"; - function define(t, e, r) { - return Object.defineProperty(t, e, { - value: r, - enumerable: !0, - configurable: !0, - writable: !0 - }), t[e]; - } - try { - define({}, ""); - } catch (t) { - define = function define(t, e, r) { - return t[e] = r; - }; - } - function wrap(t, e, r, n) { - var i = e && e.prototype instanceof Generator ? e : Generator, - a = Object.create(i.prototype), - c = new Context(n || []); - return o(a, "_invoke", { - value: makeInvokeMethod(t, r, c) - }), a; - } - function tryCatch(t, e, r) { - try { - return { - type: "normal", - arg: t.call(e, r) - }; - } catch (t) { - return { - type: "throw", - arg: t - }; - } - } - e.wrap = wrap; - var h = "suspendedStart", - l = "suspendedYield", - f = "executing", - s = "completed", - y = {}; - function Generator() {} - function GeneratorFunction() {} - function GeneratorFunctionPrototype() {} - var p = {}; - define(p, a, function () { - return this; - }); - var d = Object.getPrototypeOf, - v = d && d(d(values([]))); - v && v !== r && n.call(v, a) && (p = v); - var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); - function defineIteratorMethods(t) { - ["next", "throw", "return"].forEach(function (e) { - define(t, e, function (t) { - return this._invoke(e, t); - }); - }); - } - function AsyncIterator(t, e) { - function invoke(r, o, i, a) { - var c = tryCatch(t[r], t, o); - if ("throw" !== c.type) { - var u = c.arg, - h = u.value; - return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { - invoke("next", t, i, a); - }, function (t) { - invoke("throw", t, i, a); - }) : e.resolve(h).then(function (t) { - u.value = t, i(u); - }, function (t) { - return invoke("throw", t, i, a); - }); - } - a(c.arg); - } - var r; - o(this, "_invoke", { - value: function value(t, n) { - function callInvokeWithMethodAndArg() { - return new e(function (e, r) { - invoke(t, n, e, r); - }); - } - return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); - } - }); - } - function makeInvokeMethod(e, r, n) { - var o = h; - return function (i, a) { - if (o === f) throw Error("Generator is already running"); - if (o === s) { - if ("throw" === i) throw a; - return { - value: t, - done: !0 - }; - } - for (n.method = i, n.arg = a;;) { - var c = n.delegate; - if (c) { - var u = maybeInvokeDelegate(c, n); - if (u) { - if (u === y) continue; - return u; - } - } - if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { - if (o === h) throw o = s, n.arg; - n.dispatchException(n.arg); - } else "return" === n.method && n.abrupt("return", n.arg); - o = f; - var p = tryCatch(e, r, n); - if ("normal" === p.type) { - if (o = n.done ? s : l, p.arg === y) continue; - return { - value: p.arg, - done: n.done - }; - } - "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); - } - }; - } - function maybeInvokeDelegate(e, r) { - var n = r.method, - o = e.iterator[n]; - if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; - var i = tryCatch(o, e.iterator, r.arg); - if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; - var a = i.arg; - return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); - } - function pushTryEntry(t) { - var e = { - tryLoc: t[0] - }; - 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); - } - function resetTryEntry(t) { - var e = t.completion || {}; - e.type = "normal", delete e.arg, t.completion = e; - } - function Context(t) { - this.tryEntries = [{ - tryLoc: "root" - }], t.forEach(pushTryEntry, this), this.reset(!0); - } - function values(e) { - if (e || "" === e) { - var r = e[a]; - if (r) return r.call(e); - if ("function" == typeof e.next) return e; - if (!isNaN(e.length)) { - var o = -1, - i = function next() { - for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; - return next.value = t, next.done = !0, next; - }; - return i.next = i; - } - } - throw new TypeError(_typeof(e) + " is not iterable"); - } - return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { - value: GeneratorFunctionPrototype, - configurable: !0 - }), o(GeneratorFunctionPrototype, "constructor", { - value: GeneratorFunction, - configurable: !0 - }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { - var e = "function" == typeof t && t.constructor; - return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); - }, e.mark = function (t) { - return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; - }, e.awrap = function (t) { - return { - __await: t - }; - }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { - return this; - }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { - void 0 === i && (i = Promise); - var a = new AsyncIterator(wrap(t, r, n, o), i); - return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { - return t.done ? t.value : a.next(); - }); - }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { - return this; - }), define(g, "toString", function () { - return "[object Generator]"; - }), e.keys = function (t) { - var e = Object(t), - r = []; - for (var n in e) r.push(n); - return r.reverse(), function next() { - for (; r.length;) { - var t = r.pop(); - if (t in e) return next.value = t, next.done = !1, next; - } - return next.done = !0, next; - }; - }, e.values = values, Context.prototype = { - constructor: Context, - reset: function reset(e) { - if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); - }, - stop: function stop() { - this.done = !0; - var t = this.tryEntries[0].completion; - if ("throw" === t.type) throw t.arg; - return this.rval; - }, - dispatchException: function dispatchException(e) { - if (this.done) throw e; - var r = this; - function handle(n, o) { - return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; - } - for (var o = this.tryEntries.length - 1; o >= 0; --o) { - var i = this.tryEntries[o], - a = i.completion; - if ("root" === i.tryLoc) return handle("end"); - if (i.tryLoc <= this.prev) { - var c = n.call(i, "catchLoc"), - u = n.call(i, "finallyLoc"); - if (c && u) { - if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); - if (this.prev < i.finallyLoc) return handle(i.finallyLoc); - } else if (c) { - if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); - } else { - if (!u) throw Error("try statement without catch or finally"); - if (this.prev < i.finallyLoc) return handle(i.finallyLoc); - } - } - } - }, - abrupt: function abrupt(t, e) { - for (var r = this.tryEntries.length - 1; r >= 0; --r) { - var o = this.tryEntries[r]; - if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { - var i = o; - break; - } - } - i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); - var a = i ? i.completion : {}; - return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); - }, - complete: function complete(t, e) { - if ("throw" === t.type) throw t.arg; - return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; - }, - finish: function finish(t) { - for (var e = this.tryEntries.length - 1; e >= 0; --e) { - var r = this.tryEntries[e]; - if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; - } - }, - "catch": function _catch(t) { - for (var e = this.tryEntries.length - 1; e >= 0; --e) { - var r = this.tryEntries[e]; - if (r.tryLoc === t) { - var n = r.completion; - if ("throw" === n.type) { - var o = n.arg; - resetTryEntry(r); - } - return o; - } - } - throw Error("illegal catch attempt"); - }, - delegateYield: function delegateYield(e, r, n) { - return this.delegate = { - iterator: values(e), - resultName: r, - nextLoc: n - }, "next" === this.method && (this.arg = t), y; - } - }, e; -} -module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports; - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/typeof.js": -/*!*******************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/typeof.js ***! - \*******************************************************/ -/***/ ((module) => { - -function _typeof(o) { - "@babel/helpers - typeof"; - - return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { - return typeof o; - } : function (o) { - return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; - }, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o); -} -module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports; - -/***/ }), - -/***/ "./node_modules/@babel/runtime/regenerator/index.js": -/*!**********************************************************!*\ - !*** ./node_modules/@babel/runtime/regenerator/index.js ***! - \**********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -// TODO(Babel 8): Remove this file. - -var runtime = __webpack_require__(/*! ../helpers/regeneratorRuntime */ "./node_modules/@babel/runtime/helpers/regeneratorRuntime.js")(); -module.exports = runtime; - -// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736= -try { - regeneratorRuntime = runtime; -} catch (accidentalStrictMode) { - if (typeof globalThis === "object") { - globalThis.regeneratorRuntime = runtime; - } else { - Function("r", "regeneratorRuntime = r")(runtime); - } -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js": -/*!*********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js ***! - \*********************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _arrayLikeToArray) -/* harmony export */ }); -function _arrayLikeToArray(r, a) { - (null == a || a > r.length) && (a = r.length); - for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; - return n; -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js": -/*!*******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***! - \*******************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _arrayWithHoles) -/* harmony export */ }); -function _arrayWithHoles(r) { - if (Array.isArray(r)) return r; -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js": -/*!**********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _arrayWithoutHoles) -/* harmony export */ }); -/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray.js */ "./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js"); - -function _arrayWithoutHoles(r) { - if (Array.isArray(r)) return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__["default"])(r); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js": -/*!**************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***! - \**************************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _assertThisInitialized) -/* harmony export */ }); -function _assertThisInitialized(e) { - if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return e; -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js": -/*!*********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js ***! - \*********************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _asyncToGenerator) -/* harmony export */ }); -function asyncGeneratorStep(n, t, e, r, o, a, c) { - try { - var i = n[a](c), - u = i.value; - } catch (n) { - return void e(n); - } - i.done ? t(u) : Promise.resolve(u).then(r, o); -} -function _asyncToGenerator(n) { - return function () { - var t = this, - e = arguments; - return new Promise(function (r, o) { - var a = n.apply(t, e); - function _next(n) { - asyncGeneratorStep(a, r, o, _next, _throw, "next", n); - } - function _throw(n) { - asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); - } - _next(void 0); - }); - }; -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js": -/*!*******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js ***! - \*******************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _classCallCheck) -/* harmony export */ }); -function _classCallCheck(a, n) { - if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/construct.js": -/*!**************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/construct.js ***! - \**************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _construct) -/* harmony export */ }); -/* harmony import */ var _isNativeReflectConstruct_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isNativeReflectConstruct.js */ "./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js"); -/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./setPrototypeOf.js */ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js"); - - -function _construct(t, e, r) { - if ((0,_isNativeReflectConstruct_js__WEBPACK_IMPORTED_MODULE_0__["default"])()) return Reflect.construct.apply(null, arguments); - var o = [null]; - o.push.apply(o, e); - var p = new (t.bind.apply(t, o))(); - return r && (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_1__["default"])(p, r.prototype), p; -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/createClass.js": -/*!****************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/createClass.js ***! - \****************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _createClass) -/* harmony export */ }); -/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toPropertyKey.js */ "./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js"); - -function _defineProperties(e, r) { - for (var t = 0; t < r.length; t++) { - var o = r[t]; - o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, (0,_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__["default"])(o.key), o); - } -} -function _createClass(e, r, t) { - return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { - writable: !1 - }), e; -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js": -/*!*******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***! - \*******************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _defineProperty) -/* harmony export */ }); -/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toPropertyKey.js */ "./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js"); - -function _defineProperty(e, r, t) { - return (r = (0,_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__["default"])(r)) in e ? Object.defineProperty(e, r, { - value: t, - enumerable: !0, - configurable: !0, - writable: !0 - }) : e[r] = t, e; -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js": -/*!*******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js ***! - \*******************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _getPrototypeOf) -/* harmony export */ }); -function _getPrototypeOf(t) { - return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { - return t.__proto__ || Object.getPrototypeOf(t); - }, _getPrototypeOf(t); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/inherits.js": -/*!*************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/inherits.js ***! - \*************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _inherits) -/* harmony export */ }); -/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setPrototypeOf.js */ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js"); - -function _inherits(t, e) { - if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); - t.prototype = Object.create(e && e.prototype, { - constructor: { - value: t, - writable: !0, - configurable: !0 - } - }), Object.defineProperty(t, "prototype", { - writable: !1 - }), e && (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__["default"])(t, e); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js": -/*!*********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js ***! - \*********************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _isNativeFunction) -/* harmony export */ }); -function _isNativeFunction(t) { - try { - return -1 !== Function.toString.call(t).indexOf("[native code]"); - } catch (n) { - return "function" == typeof t; - } -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js": -/*!*****************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js ***! - \*****************************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _isNativeReflectConstruct) -/* harmony export */ }); -function _isNativeReflectConstruct() { - try { - var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); - } catch (t) {} - return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { - return !!t; - })(); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js": -/*!********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js ***! - \********************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _iterableToArray) -/* harmony export */ }); -function _iterableToArray(r) { - if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js": -/*!*************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js ***! - \*************************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _iterableToArrayLimit) -/* harmony export */ }); -function _iterableToArrayLimit(r, l) { - var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; - if (null != t) { - var e, - n, - i, - u, - a = [], - f = !0, - o = !1; - try { - if (i = (t = t.call(r)).next, 0 === l) { - if (Object(t) !== t) return; - f = !1; - } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); - } catch (r) { - o = !0, n = r; - } finally { - try { - if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; - } finally { - if (o) throw n; - } - } - return a; - } -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js": -/*!********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***! - \********************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _nonIterableRest) -/* harmony export */ }); -function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js": -/*!**********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _nonIterableSpread) -/* harmony export */ }); -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js": -/*!******************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js ***! - \******************************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _possibleConstructorReturn) -/* harmony export */ }); -/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/esm/typeof.js"); -/* harmony import */ var _assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./assertThisInitialized.js */ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js"); - - -function _possibleConstructorReturn(t, e) { - if (e && ("object" == (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__["default"])(e) || "function" == typeof e)) return e; - if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); - return (0,_assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__["default"])(t); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/readOnlyError.js": -/*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/readOnlyError.js ***! - \******************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _readOnlyError) -/* harmony export */ }); -function _readOnlyError(r) { - throw new TypeError('"' + r + '" is read-only'); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js": -/*!*******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js ***! - \*******************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _setPrototypeOf) -/* harmony export */ }); -function _setPrototypeOf(t, e) { - return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { - return t.__proto__ = e, t; - }, _setPrototypeOf(t, e); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js": -/*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js ***! - \******************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _slicedToArray) -/* harmony export */ }); -/* harmony import */ var _arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles.js */ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js"); -/* harmony import */ var _iterableToArrayLimit_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArrayLimit.js */ "./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js"); -/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js"); -/* harmony import */ var _nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableRest.js */ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js"); - - - - -function _slicedToArray(r, e) { - return (0,_arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__["default"])(r) || (0,_iterableToArrayLimit_js__WEBPACK_IMPORTED_MODULE_1__["default"])(r, e) || (0,_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__["default"])(r, e) || (0,_nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__["default"])(); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js": -/*!**********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _toConsumableArray) -/* harmony export */ }); -/* harmony import */ var _arrayWithoutHoles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithoutHoles.js */ "./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js"); -/* harmony import */ var _iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray.js */ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js"); -/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js"); -/* harmony import */ var _nonIterableSpread_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableSpread.js */ "./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js"); - - - - -function _toConsumableArray(r) { - return (0,_arrayWithoutHoles_js__WEBPACK_IMPORTED_MODULE_0__["default"])(r) || (0,_iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__["default"])(r) || (0,_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__["default"])(r) || (0,_nonIterableSpread_js__WEBPACK_IMPORTED_MODULE_3__["default"])(); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/toPrimitive.js": -/*!****************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/toPrimitive.js ***! - \****************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ toPrimitive) -/* harmony export */ }); -/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/esm/typeof.js"); - -function toPrimitive(t, r) { - if ("object" != (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__["default"])(t) || !t) return t; - var e = t[Symbol.toPrimitive]; - if (void 0 !== e) { - var i = e.call(t, r || "default"); - if ("object" != (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__["default"])(i)) return i; - throw new TypeError("@@toPrimitive must return a primitive value."); - } - return ("string" === r ? String : Number)(t); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js": -/*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js ***! - \******************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ toPropertyKey) -/* harmony export */ }); -/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/esm/typeof.js"); -/* harmony import */ var _toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./toPrimitive.js */ "./node_modules/@babel/runtime/helpers/esm/toPrimitive.js"); - - -function toPropertyKey(t) { - var i = (0,_toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__["default"])(t, "string"); - return "symbol" == (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__["default"])(i) ? i : i + ""; -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/typeof.js": -/*!***********************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/typeof.js ***! - \***********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _typeof) -/* harmony export */ }); -function _typeof(o) { - "@babel/helpers - typeof"; - - return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { - return typeof o; - } : function (o) { - return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; - }, _typeof(o); -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js": -/*!*******************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js ***! - \*******************************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _unsupportedIterableToArray) -/* harmony export */ }); -/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray.js */ "./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js"); - -function _unsupportedIterableToArray(r, a) { - if (r) { - if ("string" == typeof r) return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__["default"])(r, a); - var t = {}.toString.call(r).slice(8, -1); - return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__["default"])(r, a) : void 0; - } -} - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js": -/*!********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js ***! - \********************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ _wrapNativeSuper) -/* harmony export */ }); -/* harmony import */ var _getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getPrototypeOf.js */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js"); -/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./setPrototypeOf.js */ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js"); -/* harmony import */ var _isNativeFunction_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isNativeFunction.js */ "./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js"); -/* harmony import */ var _construct_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./construct.js */ "./node_modules/@babel/runtime/helpers/esm/construct.js"); - - - - -function _wrapNativeSuper(t) { - var r = "function" == typeof Map ? new Map() : void 0; - return _wrapNativeSuper = function _wrapNativeSuper(t) { - if (null === t || !(0,_isNativeFunction_js__WEBPACK_IMPORTED_MODULE_2__["default"])(t)) return t; - if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function"); - if (void 0 !== r) { - if (r.has(t)) return r.get(t); - r.set(t, Wrapper); - } - function Wrapper() { - return (0,_construct_js__WEBPACK_IMPORTED_MODULE_3__["default"])(t, arguments, (0,_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).constructor); - } - return Wrapper.prototype = Object.create(t.prototype, { - constructor: { - value: Wrapper, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_1__["default"])(Wrapper, t); - }, _wrapNativeSuper(t); -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/adapters/adapters.js": -/*!*****************************************************!*\ - !*** ./node_modules/axios/lib/adapters/adapters.js ***! - \*****************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _http_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./http.js */ "./node_modules/axios/lib/helpers/null.js"); -/* harmony import */ var _xhr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xhr.js */ "./node_modules/axios/lib/adapters/xhr.js"); -/* harmony import */ var _fetch_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fetch.js */ "./node_modules/axios/lib/adapters/fetch.js"); -/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/AxiosError.js */ "./node_modules/axios/lib/core/AxiosError.js"); - - - - - - -const knownAdapters = { - http: _http_js__WEBPACK_IMPORTED_MODULE_0__["default"], - xhr: _xhr_js__WEBPACK_IMPORTED_MODULE_1__["default"], - fetch: _fetch_js__WEBPACK_IMPORTED_MODULE_2__["default"] -} - -_utils_js__WEBPACK_IMPORTED_MODULE_3__["default"].forEach(knownAdapters, (fn, value) => { - if (fn) { - try { - Object.defineProperty(fn, 'name', {value}); - } catch (e) { - // eslint-disable-next-line no-empty - } - Object.defineProperty(fn, 'adapterName', {value}); - } -}); - -const renderReason = (reason) => `- ${reason}`; - -const isResolvedHandle = (adapter) => _utils_js__WEBPACK_IMPORTED_MODULE_3__["default"].isFunction(adapter) || adapter === null || adapter === false; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - getAdapter: (adapters) => { - adapters = _utils_js__WEBPACK_IMPORTED_MODULE_3__["default"].isArray(adapters) ? adapters : [adapters]; - - const {length} = adapters; - let nameOrAdapter; - let adapter; - - const rejectedReasons = {}; - - for (let i = 0; i < length; i++) { - nameOrAdapter = adapters[i]; - let id; - - adapter = nameOrAdapter; - - if (!isResolvedHandle(nameOrAdapter)) { - adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; - - if (adapter === undefined) { - throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_4__["default"](`Unknown adapter '${id}'`); - } - } - - if (adapter) { - break; - } - - rejectedReasons[id || '#' + i] = adapter; - } - - if (!adapter) { - - const reasons = Object.entries(rejectedReasons) - .map(([id, state]) => `adapter ${id} ` + - (state === false ? 'is not supported by the environment' : 'is not available in the build') - ); - - let s = length ? - (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) : - 'as no adapter specified'; - - throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_4__["default"]( - `There is no suitable adapter to dispatch the request ` + s, - 'ERR_NOT_SUPPORT' - ); - } - - return adapter; - }, - adapters: knownAdapters -}); - - -/***/ }), - -/***/ "./node_modules/axios/lib/adapters/fetch.js": -/*!**************************************************!*\ - !*** ./node_modules/axios/lib/adapters/fetch.js ***! - \**************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../platform/index.js */ "./node_modules/axios/lib/platform/index.js"); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/AxiosError.js */ "./node_modules/axios/lib/core/AxiosError.js"); -/* harmony import */ var _helpers_composeSignals_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../helpers/composeSignals.js */ "./node_modules/axios/lib/helpers/composeSignals.js"); -/* harmony import */ var _helpers_trackStream_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../helpers/trackStream.js */ "./node_modules/axios/lib/helpers/trackStream.js"); -/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ "./node_modules/axios/lib/core/AxiosHeaders.js"); -/* harmony import */ var _helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../helpers/progressEventReducer.js */ "./node_modules/axios/lib/helpers/progressEventReducer.js"); -/* harmony import */ var _helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers/resolveConfig.js */ "./node_modules/axios/lib/helpers/resolveConfig.js"); -/* harmony import */ var _core_settle_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../core/settle.js */ "./node_modules/axios/lib/core/settle.js"); - - - - - - - - - - -const isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function'; -const isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function'; - -// used only inside the fetch adapter -const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? - ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : - async (str) => new Uint8Array(await new Response(str).arrayBuffer()) -); - -const test = (fn, ...args) => { - try { - return !!fn(...args); - } catch (e) { - return false - } -} - -const supportsRequestStream = isReadableStreamSupported && test(() => { - let duplexAccessed = false; - - const hasContentType = new Request(_platform_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].origin, { - body: new ReadableStream(), - method: 'POST', - get duplex() { - duplexAccessed = true; - return 'half'; - }, - }).headers.has('Content-Type'); - - return duplexAccessed && !hasContentType; -}); - -const DEFAULT_CHUNK_SIZE = 64 * 1024; - -const supportsResponseStream = isReadableStreamSupported && - test(() => _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isReadableStream(new Response('').body)); - - -const resolvers = { - stream: supportsResponseStream && ((res) => res.body) -}; - -isFetchSupported && (((res) => { - ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => { - !resolvers[type] && (resolvers[type] = _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isFunction(res[type]) ? (res) => res[type]() : - (_, config) => { - throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__["default"](`Response type '${type}' is not supported`, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__["default"].ERR_NOT_SUPPORT, config); - }) - }); -})(new Response)); - -const getBodyLength = async (body) => { - if (body == null) { - return 0; - } - - if(_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isBlob(body)) { - return body.size; - } - - if(_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isSpecCompliantForm(body)) { - const _request = new Request(_platform_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].origin, { - method: 'POST', - body, - }); - return (await _request.arrayBuffer()).byteLength; - } - - if(_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isArrayBufferView(body) || _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isArrayBuffer(body)) { - return body.byteLength; - } - - if(_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isURLSearchParams(body)) { - body = body + ''; - } - - if(_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isString(body)) { - return (await encodeText(body)).byteLength; - } -} - -const resolveBodyLength = async (headers, body) => { - const length = _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].toFiniteNumber(headers.getContentLength()); - - return length == null ? getBodyLength(body) : length; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isFetchSupported && (async (config) => { - let { - url, - method, - data, - signal, - cancelToken, - timeout, - onDownloadProgress, - onUploadProgress, - responseType, - headers, - withCredentials = 'same-origin', - fetchOptions - } = (0,_helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_3__["default"])(config); - - responseType = responseType ? (responseType + '').toLowerCase() : 'text'; - - let composedSignal = (0,_helpers_composeSignals_js__WEBPACK_IMPORTED_MODULE_4__["default"])([signal, cancelToken && cancelToken.toAbortSignal()], timeout); - - let request; - - const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => { - composedSignal.unsubscribe(); - }); - - let requestContentLength; - - try { - if ( - onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' && - (requestContentLength = await resolveBodyLength(headers, data)) !== 0 - ) { - let _request = new Request(url, { - method: 'POST', - body: data, - duplex: "half" - }); - - let contentTypeHeader; - - if (_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { - headers.setContentType(contentTypeHeader) - } - - if (_request.body) { - const [onProgress, flush] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.progressEventDecorator)( - requestContentLength, - (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.progressEventReducer)((0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.asyncDecorator)(onUploadProgress)) - ); - - data = (0,_helpers_trackStream_js__WEBPACK_IMPORTED_MODULE_6__.trackStream)(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); - } - } - - if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isString(withCredentials)) { - withCredentials = withCredentials ? 'include' : 'omit'; - } - - // Cloudflare Workers throws when credentials are defined - // see https://github.com/cloudflare/workerd/issues/902 - const isCredentialsSupported = "credentials" in Request.prototype; - request = new Request(url, { - ...fetchOptions, - signal: composedSignal, - method: method.toUpperCase(), - headers: headers.normalize().toJSON(), - body: data, - duplex: "half", - credentials: isCredentialsSupported ? withCredentials : undefined - }); - - let response = await fetch(request); - - const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); - - if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) { - const options = {}; - - ['status', 'statusText', 'headers'].forEach(prop => { - options[prop] = response[prop]; - }); - - const responseContentLength = _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].toFiniteNumber(response.headers.get('content-length')); - - const [onProgress, flush] = onDownloadProgress && (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.progressEventDecorator)( - responseContentLength, - (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.progressEventReducer)((0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.asyncDecorator)(onDownloadProgress), true) - ) || []; - - response = new Response( - (0,_helpers_trackStream_js__WEBPACK_IMPORTED_MODULE_6__.trackStream)(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { - flush && flush(); - unsubscribe && unsubscribe(); - }), - options - ); - } - - responseType = responseType || 'text'; - - let responseData = await resolvers[_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].findKey(resolvers, responseType) || 'text'](response, config); - - !isStreamResponse && unsubscribe && unsubscribe(); - - return await new Promise((resolve, reject) => { - (0,_core_settle_js__WEBPACK_IMPORTED_MODULE_7__["default"])(resolve, reject, { - data: responseData, - headers: _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_8__["default"].from(response.headers), - status: response.status, - statusText: response.statusText, - config, - request - }) - }) - } catch (err) { - unsubscribe && unsubscribe(); - - if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) { - throw Object.assign( - new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__["default"]('Network Error', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__["default"].ERR_NETWORK, config, request), - { - cause: err.cause || err - } - ) - } - - throw _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__["default"].from(err, err && err.code, config, request); - } -})); - - - - -/***/ }), - -/***/ "./node_modules/axios/lib/adapters/xhr.js": -/*!************************************************!*\ - !*** ./node_modules/axios/lib/adapters/xhr.js ***! - \************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _core_settle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../core/settle.js */ "./node_modules/axios/lib/core/settle.js"); -/* harmony import */ var _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../defaults/transitional.js */ "./node_modules/axios/lib/defaults/transitional.js"); -/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/AxiosError.js */ "./node_modules/axios/lib/core/AxiosError.js"); -/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../cancel/CanceledError.js */ "./node_modules/axios/lib/cancel/CanceledError.js"); -/* harmony import */ var _helpers_parseProtocol_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../helpers/parseProtocol.js */ "./node_modules/axios/lib/helpers/parseProtocol.js"); -/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../platform/index.js */ "./node_modules/axios/lib/platform/index.js"); -/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ "./node_modules/axios/lib/core/AxiosHeaders.js"); -/* harmony import */ var _helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../helpers/progressEventReducer.js */ "./node_modules/axios/lib/helpers/progressEventReducer.js"); -/* harmony import */ var _helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers/resolveConfig.js */ "./node_modules/axios/lib/helpers/resolveConfig.js"); - - - - - - - - - - - -const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isXHRAdapterSupported && function (config) { - return new Promise(function dispatchXhrRequest(resolve, reject) { - const _config = (0,_helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_0__["default"])(config); - let requestData = _config.data; - const requestHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__["default"].from(_config.headers).normalize(); - let {responseType, onUploadProgress, onDownloadProgress} = _config; - let onCanceled; - let uploadThrottled, downloadThrottled; - let flushUpload, flushDownload; - - function done() { - flushUpload && flushUpload(); // flush events - flushDownload && flushDownload(); // flush events - - _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); - - _config.signal && _config.signal.removeEventListener('abort', onCanceled); - } - - let request = new XMLHttpRequest(); - - request.open(_config.method.toUpperCase(), _config.url, true); - - // Set the request timeout in MS - request.timeout = _config.timeout; - - function onloadend() { - if (!request) { - return; - } - // Prepare the response - const responseHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__["default"].from( - 'getAllResponseHeaders' in request && request.getAllResponseHeaders() - ); - const responseData = !responseType || responseType === 'text' || responseType === 'json' ? - request.responseText : request.response; - const response = { - data: responseData, - status: request.status, - statusText: request.statusText, - headers: responseHeaders, - config, - request - }; - - (0,_core_settle_js__WEBPACK_IMPORTED_MODULE_2__["default"])(function _resolve(value) { - resolve(value); - done(); - }, function _reject(err) { - reject(err); - done(); - }, response); - - // Clean up request - request = null; - } - - if ('onloadend' in request) { - // Use onloadend if available - request.onloadend = onloadend; - } else { - // Listen for ready state to emulate onloadend - request.onreadystatechange = function handleLoad() { - if (!request || request.readyState !== 4) { - return; - } - - // The request errored out and we didn't get a response, this will be - // handled by onerror instead - // With one exception: request that using file: protocol, most browsers - // will return status as 0 even though it's a successful request - if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { - return; - } - // readystate handler is calling before onerror or ontimeout handlers, - // so we should call onloadend on the next 'tick' - setTimeout(onloadend); - }; - } - - // Handle browser request cancellation (as opposed to a manual cancellation) - request.onabort = function handleAbort() { - if (!request) { - return; - } - - reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__["default"]('Request aborted', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__["default"].ECONNABORTED, config, request)); - - // Clean up request - request = null; - }; - - // Handle low level network errors - request.onerror = function handleError() { - // Real errors are hidden from us by the browser - // onerror should only fire if it's a network error - reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__["default"]('Network Error', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__["default"].ERR_NETWORK, config, request)); - - // Clean up request - request = null; - }; - - // Handle timeout - request.ontimeout = function handleTimeout() { - let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; - const transitional = _config.transitional || _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_4__["default"]; - if (_config.timeoutErrorMessage) { - timeoutErrorMessage = _config.timeoutErrorMessage; - } - reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__["default"]( - timeoutErrorMessage, - transitional.clarifyTimeoutError ? _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__["default"].ETIMEDOUT : _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__["default"].ECONNABORTED, - config, - request)); - - // Clean up request - request = null; - }; - - // Remove Content-Type if data is undefined - requestData === undefined && requestHeaders.setContentType(null); - - // Add headers to the request - if ('setRequestHeader' in request) { - _utils_js__WEBPACK_IMPORTED_MODULE_5__["default"].forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { - request.setRequestHeader(key, val); - }); - } - - // Add withCredentials to request if needed - if (!_utils_js__WEBPACK_IMPORTED_MODULE_5__["default"].isUndefined(_config.withCredentials)) { - request.withCredentials = !!_config.withCredentials; - } - - // Add responseType to request if needed - if (responseType && responseType !== 'json') { - request.responseType = _config.responseType; - } - - // Handle progress if needed - if (onDownloadProgress) { - ([downloadThrottled, flushDownload] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_6__.progressEventReducer)(onDownloadProgress, true)); - request.addEventListener('progress', downloadThrottled); - } - - // Not all browsers support upload events - if (onUploadProgress && request.upload) { - ([uploadThrottled, flushUpload] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_6__.progressEventReducer)(onUploadProgress)); - - request.upload.addEventListener('progress', uploadThrottled); - - request.upload.addEventListener('loadend', flushUpload); - } - - if (_config.cancelToken || _config.signal) { - // Handle cancellation - // eslint-disable-next-line func-names - onCanceled = cancel => { - if (!request) { - return; - } - reject(!cancel || cancel.type ? new _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_7__["default"](null, config, request) : cancel); - request.abort(); - request = null; - }; - - _config.cancelToken && _config.cancelToken.subscribe(onCanceled); - if (_config.signal) { - _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); - } - } - - const protocol = (0,_helpers_parseProtocol_js__WEBPACK_IMPORTED_MODULE_8__["default"])(_config.url); - - if (protocol && _platform_index_js__WEBPACK_IMPORTED_MODULE_9__["default"].protocols.indexOf(protocol) === -1) { - reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__["default"]('Unsupported protocol ' + protocol + ':', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__["default"].ERR_BAD_REQUEST, config)); - return; - } - - - // Send the request - request.send(requestData || null); - }); -}); - - -/***/ }), - -/***/ "./node_modules/axios/lib/axios.js": -/*!*****************************************!*\ - !*** ./node_modules/axios/lib/axios.js ***! - \*****************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _helpers_bind_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/bind.js */ "./node_modules/axios/lib/helpers/bind.js"); -/* harmony import */ var _core_Axios_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/Axios.js */ "./node_modules/axios/lib/core/Axios.js"); -/* harmony import */ var _core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./core/mergeConfig.js */ "./node_modules/axios/lib/core/mergeConfig.js"); -/* harmony import */ var _defaults_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./defaults/index.js */ "./node_modules/axios/lib/defaults/index.js"); -/* harmony import */ var _helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./helpers/formDataToJSON.js */ "./node_modules/axios/lib/helpers/formDataToJSON.js"); -/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./cancel/CanceledError.js */ "./node_modules/axios/lib/cancel/CanceledError.js"); -/* harmony import */ var _cancel_CancelToken_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./cancel/CancelToken.js */ "./node_modules/axios/lib/cancel/CancelToken.js"); -/* harmony import */ var _cancel_isCancel_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./cancel/isCancel.js */ "./node_modules/axios/lib/cancel/isCancel.js"); -/* harmony import */ var _env_data_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./env/data.js */ "./node_modules/axios/lib/env/data.js"); -/* harmony import */ var _helpers_toFormData_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./helpers/toFormData.js */ "./node_modules/axios/lib/helpers/toFormData.js"); -/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./core/AxiosError.js */ "./node_modules/axios/lib/core/AxiosError.js"); -/* harmony import */ var _helpers_spread_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./helpers/spread.js */ "./node_modules/axios/lib/helpers/spread.js"); -/* harmony import */ var _helpers_isAxiosError_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./helpers/isAxiosError.js */ "./node_modules/axios/lib/helpers/isAxiosError.js"); -/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./core/AxiosHeaders.js */ "./node_modules/axios/lib/core/AxiosHeaders.js"); -/* harmony import */ var _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./adapters/adapters.js */ "./node_modules/axios/lib/adapters/adapters.js"); -/* harmony import */ var _helpers_HttpStatusCode_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./helpers/HttpStatusCode.js */ "./node_modules/axios/lib/helpers/HttpStatusCode.js"); - - - - - - - - - - - - - - - - - - - - -/** - * Create an instance of Axios - * - * @param {Object} defaultConfig The default config for the instance - * - * @returns {Axios} A new instance of Axios - */ -function createInstance(defaultConfig) { - const context = new _core_Axios_js__WEBPACK_IMPORTED_MODULE_0__["default"](defaultConfig); - const instance = (0,_helpers_bind_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_core_Axios_js__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.request, context); - - // Copy axios.prototype to instance - _utils_js__WEBPACK_IMPORTED_MODULE_2__["default"].extend(instance, _core_Axios_js__WEBPACK_IMPORTED_MODULE_0__["default"].prototype, context, {allOwnKeys: true}); - - // Copy context to instance - _utils_js__WEBPACK_IMPORTED_MODULE_2__["default"].extend(instance, context, null, {allOwnKeys: true}); - - // Factory for creating new instances - instance.create = function create(instanceConfig) { - return createInstance((0,_core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_3__["default"])(defaultConfig, instanceConfig)); - }; - - return instance; -} - -// Create the default instance to be exported -const axios = createInstance(_defaults_index_js__WEBPACK_IMPORTED_MODULE_4__["default"]); - -// Expose Axios class to allow class inheritance -axios.Axios = _core_Axios_js__WEBPACK_IMPORTED_MODULE_0__["default"]; - -// Expose Cancel & CancelToken -axios.CanceledError = _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_5__["default"]; -axios.CancelToken = _cancel_CancelToken_js__WEBPACK_IMPORTED_MODULE_6__["default"]; -axios.isCancel = _cancel_isCancel_js__WEBPACK_IMPORTED_MODULE_7__["default"]; -axios.VERSION = _env_data_js__WEBPACK_IMPORTED_MODULE_8__.VERSION; -axios.toFormData = _helpers_toFormData_js__WEBPACK_IMPORTED_MODULE_9__["default"]; - -// Expose AxiosError class -axios.AxiosError = _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_10__["default"]; - -// alias for CanceledError for backward compatibility -axios.Cancel = axios.CanceledError; - -// Expose all/spread -axios.all = function all(promises) { - return Promise.all(promises); -}; - -axios.spread = _helpers_spread_js__WEBPACK_IMPORTED_MODULE_11__["default"]; - -// Expose isAxiosError -axios.isAxiosError = _helpers_isAxiosError_js__WEBPACK_IMPORTED_MODULE_12__["default"]; - -// Expose mergeConfig -axios.mergeConfig = _core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_3__["default"]; - -axios.AxiosHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_13__["default"]; - -axios.formToJSON = thing => (0,_helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_14__["default"])(_utils_js__WEBPACK_IMPORTED_MODULE_2__["default"].isHTMLForm(thing) ? new FormData(thing) : thing); - -axios.getAdapter = _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_15__["default"].getAdapter; - -axios.HttpStatusCode = _helpers_HttpStatusCode_js__WEBPACK_IMPORTED_MODULE_16__["default"]; - -axios.default = axios; - -// this module should only have a default export -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (axios); - - -/***/ }), - -/***/ "./node_modules/axios/lib/cancel/CancelToken.js": -/*!******************************************************!*\ - !*** ./node_modules/axios/lib/cancel/CancelToken.js ***! - \******************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _CanceledError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CanceledError.js */ "./node_modules/axios/lib/cancel/CanceledError.js"); - - - - -/** - * A `CancelToken` is an object that can be used to request cancellation of an operation. - * - * @param {Function} executor The executor function. - * - * @returns {CancelToken} - */ -class CancelToken { - constructor(executor) { - if (typeof executor !== 'function') { - throw new TypeError('executor must be a function.'); - } - - let resolvePromise; - - this.promise = new Promise(function promiseExecutor(resolve) { - resolvePromise = resolve; - }); - - const token = this; - - // eslint-disable-next-line func-names - this.promise.then(cancel => { - if (!token._listeners) return; - - let i = token._listeners.length; - - while (i-- > 0) { - token._listeners[i](cancel); - } - token._listeners = null; - }); - - // eslint-disable-next-line func-names - this.promise.then = onfulfilled => { - let _resolve; - // eslint-disable-next-line func-names - const promise = new Promise(resolve => { - token.subscribe(resolve); - _resolve = resolve; - }).then(onfulfilled); - - promise.cancel = function reject() { - token.unsubscribe(_resolve); - }; - - return promise; - }; - - executor(function cancel(message, config, request) { - if (token.reason) { - // Cancellation has already been requested - return; - } - - token.reason = new _CanceledError_js__WEBPACK_IMPORTED_MODULE_0__["default"](message, config, request); - resolvePromise(token.reason); - }); - } - - /** - * Throws a `CanceledError` if cancellation has been requested. - */ - throwIfRequested() { - if (this.reason) { - throw this.reason; - } - } - - /** - * Subscribe to the cancel signal - */ - - subscribe(listener) { - if (this.reason) { - listener(this.reason); - return; - } - - if (this._listeners) { - this._listeners.push(listener); - } else { - this._listeners = [listener]; - } - } - - /** - * Unsubscribe from the cancel signal - */ - - unsubscribe(listener) { - if (!this._listeners) { - return; - } - const index = this._listeners.indexOf(listener); - if (index !== -1) { - this._listeners.splice(index, 1); - } - } - - toAbortSignal() { - const controller = new AbortController(); - - const abort = (err) => { - controller.abort(err); - }; - - this.subscribe(abort); - - controller.signal.unsubscribe = () => this.unsubscribe(abort); - - return controller.signal; - } - - /** - * Returns an object that contains a new `CancelToken` and a function that, when called, - * cancels the `CancelToken`. - */ - static source() { - let cancel; - const token = new CancelToken(function executor(c) { - cancel = c; - }); - return { - token, - cancel - }; - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CancelToken); - - -/***/ }), - -/***/ "./node_modules/axios/lib/cancel/CanceledError.js": -/*!********************************************************!*\ - !*** ./node_modules/axios/lib/cancel/CanceledError.js ***! - \********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/AxiosError.js */ "./node_modules/axios/lib/core/AxiosError.js"); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); - - - - - -/** - * A `CanceledError` is an object that is thrown when an operation is canceled. - * - * @param {string=} message The message. - * @param {Object=} config The config. - * @param {Object=} request The request. - * - * @returns {CanceledError} The created error. - */ -function CanceledError(message, config, request) { - // eslint-disable-next-line no-eq-null,eqeqeq - _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__["default"].call(this, message == null ? 'canceled' : message, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__["default"].ERR_CANCELED, config, request); - this.name = 'CanceledError'; -} - -_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].inherits(CanceledError, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__["default"], { - __CANCEL__: true -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CanceledError); - - -/***/ }), - -/***/ "./node_modules/axios/lib/cancel/isCancel.js": -/*!***************************************************!*\ - !*** ./node_modules/axios/lib/cancel/isCancel.js ***! - \***************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ isCancel) -/* harmony export */ }); - - -function isCancel(value) { - return !!(value && value.__CANCEL__); -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/Axios.js": -/*!**********************************************!*\ - !*** ./node_modules/axios/lib/core/Axios.js ***! - \**********************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _helpers_buildURL_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../helpers/buildURL.js */ "./node_modules/axios/lib/helpers/buildURL.js"); -/* harmony import */ var _InterceptorManager_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./InterceptorManager.js */ "./node_modules/axios/lib/core/InterceptorManager.js"); -/* harmony import */ var _dispatchRequest_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dispatchRequest.js */ "./node_modules/axios/lib/core/dispatchRequest.js"); -/* harmony import */ var _mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mergeConfig.js */ "./node_modules/axios/lib/core/mergeConfig.js"); -/* harmony import */ var _buildFullPath_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./buildFullPath.js */ "./node_modules/axios/lib/core/buildFullPath.js"); -/* harmony import */ var _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers/validator.js */ "./node_modules/axios/lib/helpers/validator.js"); -/* harmony import */ var _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AxiosHeaders.js */ "./node_modules/axios/lib/core/AxiosHeaders.js"); - - - - - - - - - - - -const validators = _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__["default"].validators; - -/** - * Create a new instance of Axios - * - * @param {Object} instanceConfig The default config for the instance - * - * @return {Axios} A new instance of Axios - */ -class Axios { - constructor(instanceConfig) { - this.defaults = instanceConfig; - this.interceptors = { - request: new _InterceptorManager_js__WEBPACK_IMPORTED_MODULE_1__["default"](), - response: new _InterceptorManager_js__WEBPACK_IMPORTED_MODULE_1__["default"]() - }; - } - - /** - * Dispatch a request - * - * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) - * @param {?Object} config - * - * @returns {Promise} The Promise to be fulfilled - */ - async request(configOrUrl, config) { - try { - return await this._request(configOrUrl, config); - } catch (err) { - if (err instanceof Error) { - let dummy = {}; - - Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error()); - - // slice off the Error: ... line - const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; - try { - if (!err.stack) { - err.stack = stack; - // match without the 2 top stack lines - } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { - err.stack += '\n' + stack - } - } catch (e) { - // ignore the case where "stack" is an un-writable property - } - } - - throw err; - } - } - - _request(configOrUrl, config) { - /*eslint no-param-reassign:0*/ - // Allow for axios('example/url'[, config]) a la fetch API - if (typeof configOrUrl === 'string') { - config = config || {}; - config.url = configOrUrl; - } else { - config = configOrUrl || {}; - } - - config = (0,_mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this.defaults, config); - - const {transitional, paramsSerializer, headers} = config; - - if (transitional !== undefined) { - _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__["default"].assertOptions(transitional, { - silentJSONParsing: validators.transitional(validators.boolean), - forcedJSONParsing: validators.transitional(validators.boolean), - clarifyTimeoutError: validators.transitional(validators.boolean) - }, false); - } - - if (paramsSerializer != null) { - if (_utils_js__WEBPACK_IMPORTED_MODULE_3__["default"].isFunction(paramsSerializer)) { - config.paramsSerializer = { - serialize: paramsSerializer - } - } else { - _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__["default"].assertOptions(paramsSerializer, { - encode: validators.function, - serialize: validators.function - }, true); - } - } - - _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__["default"].assertOptions(config, { - baseUrl: validators.spelling('baseURL'), - withXsrfToken: validators.spelling('withXSRFToken') - }, true); - - // Set config.method - config.method = (config.method || this.defaults.method || 'get').toLowerCase(); - - // Flatten headers - let contextHeaders = headers && _utils_js__WEBPACK_IMPORTED_MODULE_3__["default"].merge( - headers.common, - headers[config.method] - ); - - headers && _utils_js__WEBPACK_IMPORTED_MODULE_3__["default"].forEach( - ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], - (method) => { - delete headers[method]; - } - ); - - config.headers = _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_4__["default"].concat(contextHeaders, headers); - - // filter out skipped interceptors - const requestInterceptorChain = []; - let synchronousRequestInterceptors = true; - this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { - if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { - return; - } - - synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; - - requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); - }); - - const responseInterceptorChain = []; - this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { - responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); - }); - - let promise; - let i = 0; - let len; - - if (!synchronousRequestInterceptors) { - const chain = [_dispatchRequest_js__WEBPACK_IMPORTED_MODULE_5__["default"].bind(this), undefined]; - chain.unshift.apply(chain, requestInterceptorChain); - chain.push.apply(chain, responseInterceptorChain); - len = chain.length; - - promise = Promise.resolve(config); - - while (i < len) { - promise = promise.then(chain[i++], chain[i++]); - } - - return promise; - } - - len = requestInterceptorChain.length; - - let newConfig = config; - - i = 0; - - while (i < len) { - const onFulfilled = requestInterceptorChain[i++]; - const onRejected = requestInterceptorChain[i++]; - try { - newConfig = onFulfilled(newConfig); - } catch (error) { - onRejected.call(this, error); - break; - } - } - - try { - promise = _dispatchRequest_js__WEBPACK_IMPORTED_MODULE_5__["default"].call(this, newConfig); - } catch (error) { - return Promise.reject(error); - } - - i = 0; - len = responseInterceptorChain.length; - - while (i < len) { - promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); - } - - return promise; - } - - getUri(config) { - config = (0,_mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this.defaults, config); - const fullPath = (0,_buildFullPath_js__WEBPACK_IMPORTED_MODULE_6__["default"])(config.baseURL, config.url); - return (0,_helpers_buildURL_js__WEBPACK_IMPORTED_MODULE_7__["default"])(fullPath, config.params, config.paramsSerializer); - } -} - -// Provide aliases for supported request methods -_utils_js__WEBPACK_IMPORTED_MODULE_3__["default"].forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, config) { - return this.request((0,_mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__["default"])(config || {}, { - method, - url, - data: (config || {}).data - })); - }; -}); - -_utils_js__WEBPACK_IMPORTED_MODULE_3__["default"].forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - /*eslint func-names:0*/ - - function generateHTTPMethod(isForm) { - return function httpMethod(url, data, config) { - return this.request((0,_mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__["default"])(config || {}, { - method, - headers: isForm ? { - 'Content-Type': 'multipart/form-data' - } : {}, - url, - data - })); - }; - } - - Axios.prototype[method] = generateHTTPMethod(); - - Axios.prototype[method + 'Form'] = generateHTTPMethod(true); -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Axios); - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/AxiosError.js": -/*!***************************************************!*\ - !*** ./node_modules/axios/lib/core/AxiosError.js ***! - \***************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); - - - - -/** - * Create an Error with the specified message, config, error code, request and response. - * - * @param {string} message The error message. - * @param {string} [code] The error code (for example, 'ECONNABORTED'). - * @param {Object} [config] The config. - * @param {Object} [request] The request. - * @param {Object} [response] The response. - * - * @returns {Error} The created error. - */ -function AxiosError(message, code, config, request, response) { - Error.call(this); - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } else { - this.stack = (new Error()).stack; - } - - this.message = message; - this.name = 'AxiosError'; - code && (this.code = code); - config && (this.config = config); - request && (this.request = request); - if (response) { - this.response = response; - this.status = response.status ? response.status : null; - } -} - -_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].inherits(AxiosError, Error, { - toJSON: function toJSON() { - return { - // Standard - message: this.message, - name: this.name, - // Microsoft - description: this.description, - number: this.number, - // Mozilla - fileName: this.fileName, - lineNumber: this.lineNumber, - columnNumber: this.columnNumber, - stack: this.stack, - // Axios - config: _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].toJSONObject(this.config), - code: this.code, - status: this.status - }; - } -}); - -const prototype = AxiosError.prototype; -const descriptors = {}; - -[ - 'ERR_BAD_OPTION_VALUE', - 'ERR_BAD_OPTION', - 'ECONNABORTED', - 'ETIMEDOUT', - 'ERR_NETWORK', - 'ERR_FR_TOO_MANY_REDIRECTS', - 'ERR_DEPRECATED', - 'ERR_BAD_RESPONSE', - 'ERR_BAD_REQUEST', - 'ERR_CANCELED', - 'ERR_NOT_SUPPORT', - 'ERR_INVALID_URL' -// eslint-disable-next-line func-names -].forEach(code => { - descriptors[code] = {value: code}; -}); - -Object.defineProperties(AxiosError, descriptors); -Object.defineProperty(prototype, 'isAxiosError', {value: true}); - -// eslint-disable-next-line func-names -AxiosError.from = (error, code, config, request, response, customProps) => { - const axiosError = Object.create(prototype); - - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].toFlatObject(error, axiosError, function filter(obj) { - return obj !== Error.prototype; - }, prop => { - return prop !== 'isAxiosError'; - }); - - AxiosError.call(axiosError, error.message, code, config, request, response); - - axiosError.cause = error; - - axiosError.name = error.name; - - customProps && Object.assign(axiosError, customProps); - - return axiosError; -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AxiosError); - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/AxiosHeaders.js": -/*!*****************************************************!*\ - !*** ./node_modules/axios/lib/core/AxiosHeaders.js ***! - \*****************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _helpers_parseHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/parseHeaders.js */ "./node_modules/axios/lib/helpers/parseHeaders.js"); - - - - - -const $internals = Symbol('internals'); - -function normalizeHeader(header) { - return header && String(header).trim().toLowerCase(); -} - -function normalizeValue(value) { - if (value === false || value == null) { - return value; - } - - return _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArray(value) ? value.map(normalizeValue) : String(value); -} - -function parseTokens(str) { - const tokens = Object.create(null); - const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; - let match; - - while ((match = tokensRE.exec(str))) { - tokens[match[1]] = match[2]; - } - - return tokens; -} - -const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); - -function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isFunction(filter)) { - return filter.call(this, value, header); - } - - if (isHeaderNameFilter) { - value = header; - } - - if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isString(value)) return; - - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isString(filter)) { - return value.indexOf(filter) !== -1; - } - - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isRegExp(filter)) { - return filter.test(value); - } -} - -function formatHeader(header) { - return header.trim() - .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { - return char.toUpperCase() + str; - }); -} - -function buildAccessors(obj, header) { - const accessorName = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].toCamelCase(' ' + header); - - ['get', 'set', 'has'].forEach(methodName => { - Object.defineProperty(obj, methodName + accessorName, { - value: function(arg1, arg2, arg3) { - return this[methodName].call(this, header, arg1, arg2, arg3); - }, - configurable: true - }); - }); -} - -class AxiosHeaders { - constructor(headers) { - headers && this.set(headers); - } - - set(header, valueOrRewrite, rewrite) { - const self = this; - - function setHeader(_value, _header, _rewrite) { - const lHeader = normalizeHeader(_header); - - if (!lHeader) { - throw new Error('header name must be a non-empty string'); - } - - const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].findKey(self, lHeader); - - if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { - self[key || _header] = normalizeValue(_value); - } - } - - const setHeaders = (headers, _rewrite) => - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); - - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isPlainObject(header) || header instanceof this.constructor) { - setHeaders(header, valueOrRewrite) - } else if(_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { - setHeaders((0,_helpers_parseHeaders_js__WEBPACK_IMPORTED_MODULE_1__["default"])(header), valueOrRewrite); - } else if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isHeaders(header)) { - for (const [key, value] of header.entries()) { - setHeader(value, key, rewrite); - } - } else { - header != null && setHeader(valueOrRewrite, header, rewrite); - } - - return this; - } - - get(header, parser) { - header = normalizeHeader(header); - - if (header) { - const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].findKey(this, header); - - if (key) { - const value = this[key]; - - if (!parser) { - return value; - } - - if (parser === true) { - return parseTokens(value); - } - - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isFunction(parser)) { - return parser.call(this, value, key); - } - - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isRegExp(parser)) { - return parser.exec(value); - } - - throw new TypeError('parser must be boolean|regexp|function'); - } - } - } - - has(header, matcher) { - header = normalizeHeader(header); - - if (header) { - const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].findKey(this, header); - - return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); - } - - return false; - } - - delete(header, matcher) { - const self = this; - let deleted = false; - - function deleteHeader(_header) { - _header = normalizeHeader(_header); - - if (_header) { - const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].findKey(self, _header); - - if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { - delete self[key]; - - deleted = true; - } - } - } - - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArray(header)) { - header.forEach(deleteHeader); - } else { - deleteHeader(header); - } - - return deleted; - } - - clear(matcher) { - const keys = Object.keys(this); - let i = keys.length; - let deleted = false; - - while (i--) { - const key = keys[i]; - if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { - delete this[key]; - deleted = true; - } - } - - return deleted; - } - - normalize(format) { - const self = this; - const headers = {}; - - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].forEach(this, (value, header) => { - const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].findKey(headers, header); - - if (key) { - self[key] = normalizeValue(value); - delete self[header]; - return; - } - - const normalized = format ? formatHeader(header) : String(header).trim(); - - if (normalized !== header) { - delete self[header]; - } - - self[normalized] = normalizeValue(value); - - headers[normalized] = true; - }); - - return this; - } - - concat(...targets) { - return this.constructor.concat(this, ...targets); - } - - toJSON(asStrings) { - const obj = Object.create(null); - - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].forEach(this, (value, header) => { - value != null && value !== false && (obj[header] = asStrings && _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArray(value) ? value.join(', ') : value); - }); - - return obj; - } - - [Symbol.iterator]() { - return Object.entries(this.toJSON())[Symbol.iterator](); - } - - toString() { - return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n'); - } - - get [Symbol.toStringTag]() { - return 'AxiosHeaders'; - } - - static from(thing) { - return thing instanceof this ? thing : new this(thing); - } - - static concat(first, ...targets) { - const computed = new this(first); - - targets.forEach((target) => computed.set(target)); - - return computed; - } - - static accessor(header) { - const internals = this[$internals] = (this[$internals] = { - accessors: {} - }); - - const accessors = internals.accessors; - const prototype = this.prototype; - - function defineAccessor(_header) { - const lHeader = normalizeHeader(_header); - - if (!accessors[lHeader]) { - buildAccessors(prototype, _header); - accessors[lHeader] = true; - } - } - - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); - - return this; - } -} - -AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); - -// reserved names hotfix -_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => { - let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` - return { - get: () => value, - set(headerValue) { - this[mapped] = headerValue; - } - } -}); - -_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].freezeMethods(AxiosHeaders); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AxiosHeaders); - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/InterceptorManager.js": -/*!***********************************************************!*\ - !*** ./node_modules/axios/lib/core/InterceptorManager.js ***! - \***********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../utils.js */ "./node_modules/axios/lib/utils.js"); - - - - -class InterceptorManager { - constructor() { - this.handlers = []; - } - - /** - * Add a new interceptor to the stack - * - * @param {Function} fulfilled The function to handle `then` for a `Promise` - * @param {Function} rejected The function to handle `reject` for a `Promise` - * - * @return {Number} An ID used to remove interceptor later - */ - use(fulfilled, rejected, options) { - this.handlers.push({ - fulfilled, - rejected, - synchronous: options ? options.synchronous : false, - runWhen: options ? options.runWhen : null - }); - return this.handlers.length - 1; - } - - /** - * Remove an interceptor from the stack - * - * @param {Number} id The ID that was returned by `use` - * - * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise - */ - eject(id) { - if (this.handlers[id]) { - this.handlers[id] = null; - } - } - - /** - * Clear all interceptors from the stack - * - * @returns {void} - */ - clear() { - if (this.handlers) { - this.handlers = []; - } - } - - /** - * Iterate over all the registered interceptors - * - * This method is particularly useful for skipping over any - * interceptors that may have become `null` calling `eject`. - * - * @param {Function} fn The function to call for each interceptor - * - * @returns {void} - */ - forEach(fn) { - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].forEach(this.handlers, function forEachHandler(h) { - if (h !== null) { - fn(h); - } - }); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InterceptorManager); - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/buildFullPath.js": -/*!******************************************************!*\ - !*** ./node_modules/axios/lib/core/buildFullPath.js ***! - \******************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ buildFullPath) -/* harmony export */ }); -/* harmony import */ var _helpers_isAbsoluteURL_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers/isAbsoluteURL.js */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js"); -/* harmony import */ var _helpers_combineURLs_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/combineURLs.js */ "./node_modules/axios/lib/helpers/combineURLs.js"); - - - - - -/** - * Creates a new URL by combining the baseURL with the requestedURL, - * only when the requestedURL is not already an absolute URL. - * If the requestURL is absolute, this function returns the requestedURL untouched. - * - * @param {string} baseURL The base URL - * @param {string} requestedURL Absolute or relative URL to combine - * - * @returns {string} The combined full path - */ -function buildFullPath(baseURL, requestedURL) { - if (baseURL && !(0,_helpers_isAbsoluteURL_js__WEBPACK_IMPORTED_MODULE_0__["default"])(requestedURL)) { - return (0,_helpers_combineURLs_js__WEBPACK_IMPORTED_MODULE_1__["default"])(baseURL, requestedURL); - } - return requestedURL; -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/dispatchRequest.js": -/*!********************************************************!*\ - !*** ./node_modules/axios/lib/core/dispatchRequest.js ***! - \********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ dispatchRequest) -/* harmony export */ }); -/* harmony import */ var _transformData_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./transformData.js */ "./node_modules/axios/lib/core/transformData.js"); -/* harmony import */ var _cancel_isCancel_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../cancel/isCancel.js */ "./node_modules/axios/lib/cancel/isCancel.js"); -/* harmony import */ var _defaults_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../defaults/index.js */ "./node_modules/axios/lib/defaults/index.js"); -/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../cancel/CanceledError.js */ "./node_modules/axios/lib/cancel/CanceledError.js"); -/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ "./node_modules/axios/lib/core/AxiosHeaders.js"); -/* harmony import */ var _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../adapters/adapters.js */ "./node_modules/axios/lib/adapters/adapters.js"); - - - - - - - - - -/** - * Throws a `CanceledError` if cancellation has been requested. - * - * @param {Object} config The config that is to be used for the request - * - * @returns {void} - */ -function throwIfCancellationRequested(config) { - if (config.cancelToken) { - config.cancelToken.throwIfRequested(); - } - - if (config.signal && config.signal.aborted) { - throw new _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_0__["default"](null, config); - } -} - -/** - * Dispatch a request to the server using the configured adapter. - * - * @param {object} config The config that is to be used for the request - * - * @returns {Promise} The Promise to be fulfilled - */ -function dispatchRequest(config) { - throwIfCancellationRequested(config); - - config.headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__["default"].from(config.headers); - - // Transform request data - config.data = _transformData_js__WEBPACK_IMPORTED_MODULE_2__["default"].call( - config, - config.transformRequest - ); - - if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { - config.headers.setContentType('application/x-www-form-urlencoded', false); - } - - const adapter = _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_3__["default"].getAdapter(config.adapter || _defaults_index_js__WEBPACK_IMPORTED_MODULE_4__["default"].adapter); - - return adapter(config).then(function onAdapterResolution(response) { - throwIfCancellationRequested(config); - - // Transform response data - response.data = _transformData_js__WEBPACK_IMPORTED_MODULE_2__["default"].call( - config, - config.transformResponse, - response - ); - - response.headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__["default"].from(response.headers); - - return response; - }, function onAdapterRejection(reason) { - if (!(0,_cancel_isCancel_js__WEBPACK_IMPORTED_MODULE_5__["default"])(reason)) { - throwIfCancellationRequested(config); - - // Transform response data - if (reason && reason.response) { - reason.response.data = _transformData_js__WEBPACK_IMPORTED_MODULE_2__["default"].call( - config, - config.transformResponse, - reason.response - ); - reason.response.headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__["default"].from(reason.response.headers); - } - } - - return Promise.reject(reason); - }); -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/mergeConfig.js": -/*!****************************************************!*\ - !*** ./node_modules/axios/lib/core/mergeConfig.js ***! - \****************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ mergeConfig) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AxiosHeaders.js */ "./node_modules/axios/lib/core/AxiosHeaders.js"); - - - - - -const headersToObject = (thing) => thing instanceof _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_0__["default"] ? { ...thing } : thing; - -/** - * Config-specific merge-function which creates a new config-object - * by merging two configuration objects together. - * - * @param {Object} config1 - * @param {Object} config2 - * - * @returns {Object} New object resulting from merging config2 to config1 - */ -function mergeConfig(config1, config2) { - // eslint-disable-next-line no-param-reassign - config2 = config2 || {}; - const config = {}; - - function getMergedValue(target, source, prop, caseless) { - if (_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isPlainObject(target) && _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isPlainObject(source)) { - return _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].merge.call({caseless}, target, source); - } else if (_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isPlainObject(source)) { - return _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].merge({}, source); - } else if (_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isArray(source)) { - return source.slice(); - } - return source; - } - - // eslint-disable-next-line consistent-return - function mergeDeepProperties(a, b, prop , caseless) { - if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isUndefined(b)) { - return getMergedValue(a, b, prop , caseless); - } else if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isUndefined(a)) { - return getMergedValue(undefined, a, prop , caseless); - } - } - - // eslint-disable-next-line consistent-return - function valueFromConfig2(a, b) { - if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isUndefined(b)) { - return getMergedValue(undefined, b); - } - } - - // eslint-disable-next-line consistent-return - function defaultToConfig2(a, b) { - if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isUndefined(b)) { - return getMergedValue(undefined, b); - } else if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isUndefined(a)) { - return getMergedValue(undefined, a); - } - } - - // eslint-disable-next-line consistent-return - function mergeDirectKeys(a, b, prop) { - if (prop in config2) { - return getMergedValue(a, b); - } else if (prop in config1) { - return getMergedValue(undefined, a); - } - } - - const mergeMap = { - url: valueFromConfig2, - method: valueFromConfig2, - data: valueFromConfig2, - baseURL: defaultToConfig2, - transformRequest: defaultToConfig2, - transformResponse: defaultToConfig2, - paramsSerializer: defaultToConfig2, - timeout: defaultToConfig2, - timeoutMessage: defaultToConfig2, - withCredentials: defaultToConfig2, - withXSRFToken: defaultToConfig2, - adapter: defaultToConfig2, - responseType: defaultToConfig2, - xsrfCookieName: defaultToConfig2, - xsrfHeaderName: defaultToConfig2, - onUploadProgress: defaultToConfig2, - onDownloadProgress: defaultToConfig2, - decompress: defaultToConfig2, - maxContentLength: defaultToConfig2, - maxBodyLength: defaultToConfig2, - beforeRedirect: defaultToConfig2, - transport: defaultToConfig2, - httpAgent: defaultToConfig2, - httpsAgent: defaultToConfig2, - cancelToken: defaultToConfig2, - socketPath: defaultToConfig2, - responseEncoding: defaultToConfig2, - validateStatus: mergeDirectKeys, - headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) - }; - - _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { - const merge = mergeMap[prop] || mergeDeepProperties; - const configValue = merge(config1[prop], config2[prop], prop); - (_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); - }); - - return config; -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/settle.js": -/*!***********************************************!*\ - !*** ./node_modules/axios/lib/core/settle.js ***! - \***********************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ settle) -/* harmony export */ }); -/* harmony import */ var _AxiosError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AxiosError.js */ "./node_modules/axios/lib/core/AxiosError.js"); - - - - -/** - * Resolve or reject a Promise based on response status. - * - * @param {Function} resolve A function that resolves the promise. - * @param {Function} reject A function that rejects the promise. - * @param {object} response The response. - * - * @returns {object} The response. - */ -function settle(resolve, reject, response) { - const validateStatus = response.config.validateStatus; - if (!response.status || !validateStatus || validateStatus(response.status)) { - resolve(response); - } else { - reject(new _AxiosError_js__WEBPACK_IMPORTED_MODULE_0__["default"]( - 'Request failed with status code ' + response.status, - [_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__["default"].ERR_BAD_REQUEST, _AxiosError_js__WEBPACK_IMPORTED_MODULE_0__["default"].ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], - response.config, - response.request, - response - )); - } -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/transformData.js": -/*!******************************************************!*\ - !*** ./node_modules/axios/lib/core/transformData.js ***! - \******************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ transformData) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _defaults_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../defaults/index.js */ "./node_modules/axios/lib/defaults/index.js"); -/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ "./node_modules/axios/lib/core/AxiosHeaders.js"); - - - - - - -/** - * Transform the data for a request or a response - * - * @param {Array|Function} fns A single function or Array of functions - * @param {?Object} response The response object - * - * @returns {*} The resulting transformed data - */ -function transformData(fns, response) { - const config = this || _defaults_index_js__WEBPACK_IMPORTED_MODULE_0__["default"]; - const context = response || config; - const headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__["default"].from(context.headers); - let data = context.data; - - _utils_js__WEBPACK_IMPORTED_MODULE_2__["default"].forEach(fns, function transform(fn) { - data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); - }); - - headers.normalize(); - - return data; -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/defaults/index.js": -/*!**************************************************!*\ - !*** ./node_modules/axios/lib/defaults/index.js ***! - \**************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../core/AxiosError.js */ "./node_modules/axios/lib/core/AxiosError.js"); -/* harmony import */ var _transitional_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transitional.js */ "./node_modules/axios/lib/defaults/transitional.js"); -/* harmony import */ var _helpers_toFormData_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../helpers/toFormData.js */ "./node_modules/axios/lib/helpers/toFormData.js"); -/* harmony import */ var _helpers_toURLEncodedForm_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers/toURLEncodedForm.js */ "./node_modules/axios/lib/helpers/toURLEncodedForm.js"); -/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../platform/index.js */ "./node_modules/axios/lib/platform/index.js"); -/* harmony import */ var _helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers/formDataToJSON.js */ "./node_modules/axios/lib/helpers/formDataToJSON.js"); - - - - - - - - - - -/** - * It takes a string, tries to parse it, and if it fails, it returns the stringified version - * of the input - * - * @param {any} rawValue - The value to be stringified. - * @param {Function} parser - A function that parses a string into a JavaScript object. - * @param {Function} encoder - A function that takes a value and returns a string. - * - * @returns {string} A stringified version of the rawValue. - */ -function stringifySafely(rawValue, parser, encoder) { - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isString(rawValue)) { - try { - (parser || JSON.parse)(rawValue); - return _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].trim(rawValue); - } catch (e) { - if (e.name !== 'SyntaxError') { - throw e; - } - } - } - - return (encoder || JSON.stringify)(rawValue); -} - -const defaults = { - - transitional: _transitional_js__WEBPACK_IMPORTED_MODULE_1__["default"], - - adapter: ['xhr', 'http', 'fetch'], - - transformRequest: [function transformRequest(data, headers) { - const contentType = headers.getContentType() || ''; - const hasJSONContentType = contentType.indexOf('application/json') > -1; - const isObjectPayload = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isObject(data); - - if (isObjectPayload && _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isHTMLForm(data)) { - data = new FormData(data); - } - - const isFormData = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isFormData(data); - - if (isFormData) { - return hasJSONContentType ? JSON.stringify((0,_helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_2__["default"])(data)) : data; - } - - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArrayBuffer(data) || - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isBuffer(data) || - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isStream(data) || - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isFile(data) || - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isBlob(data) || - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isReadableStream(data) - ) { - return data; - } - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArrayBufferView(data)) { - return data.buffer; - } - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isURLSearchParams(data)) { - headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); - return data.toString(); - } - - let isFileList; - - if (isObjectPayload) { - if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { - return (0,_helpers_toURLEncodedForm_js__WEBPACK_IMPORTED_MODULE_3__["default"])(data, this.formSerializer).toString(); - } - - if ((isFileList = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { - const _FormData = this.env && this.env.FormData; - - return (0,_helpers_toFormData_js__WEBPACK_IMPORTED_MODULE_4__["default"])( - isFileList ? {'files[]': data} : data, - _FormData && new _FormData(), - this.formSerializer - ); - } - } - - if (isObjectPayload || hasJSONContentType ) { - headers.setContentType('application/json', false); - return stringifySafely(data); - } - - return data; - }], - - transformResponse: [function transformResponse(data) { - const transitional = this.transitional || defaults.transitional; - const forcedJSONParsing = transitional && transitional.forcedJSONParsing; - const JSONRequested = this.responseType === 'json'; - - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isResponse(data) || _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isReadableStream(data)) { - return data; - } - - if (data && _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { - const silentJSONParsing = transitional && transitional.silentJSONParsing; - const strictJSONParsing = !silentJSONParsing && JSONRequested; - - try { - return JSON.parse(data); - } catch (e) { - if (strictJSONParsing) { - if (e.name === 'SyntaxError') { - throw _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_5__["default"].from(e, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_5__["default"].ERR_BAD_RESPONSE, this, null, this.response); - } - throw e; - } - } - } - - return data; - }], - - /** - * A timeout in milliseconds to abort a request. If set to 0 (default) a - * timeout is not created. - */ - timeout: 0, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN', - - maxContentLength: -1, - maxBodyLength: -1, - - env: { - FormData: _platform_index_js__WEBPACK_IMPORTED_MODULE_6__["default"].classes.FormData, - Blob: _platform_index_js__WEBPACK_IMPORTED_MODULE_6__["default"].classes.Blob - }, - - validateStatus: function validateStatus(status) { - return status >= 200 && status < 300; - }, - - headers: { - common: { - 'Accept': 'application/json, text/plain, */*', - 'Content-Type': undefined - } - } -}; - -_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => { - defaults.headers[method] = {}; -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); - - -/***/ }), - -/***/ "./node_modules/axios/lib/defaults/transitional.js": -/*!*********************************************************!*\ - !*** ./node_modules/axios/lib/defaults/transitional.js ***! - \*********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - silentJSONParsing: true, - forcedJSONParsing: true, - clarifyTimeoutError: false -}); - - -/***/ }), - -/***/ "./node_modules/axios/lib/env/data.js": -/*!********************************************!*\ - !*** ./node_modules/axios/lib/env/data.js ***! - \********************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ VERSION: () => (/* binding */ VERSION) -/* harmony export */ }); -const VERSION = "1.7.9"; - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/AxiosURLSearchParams.js": -/*!****************************************************************!*\ - !*** ./node_modules/axios/lib/helpers/AxiosURLSearchParams.js ***! - \****************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _toFormData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toFormData.js */ "./node_modules/axios/lib/helpers/toFormData.js"); - - - - -/** - * It encodes a string by replacing all characters that are not in the unreserved set with - * their percent-encoded equivalents - * - * @param {string} str - The string to encode. - * - * @returns {string} The encoded string. - */ -function encode(str) { - const charMap = { - '!': '%21', - "'": '%27', - '(': '%28', - ')': '%29', - '~': '%7E', - '%20': '+', - '%00': '\x00' - }; - return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { - return charMap[match]; - }); -} - -/** - * It takes a params object and converts it to a FormData object - * - * @param {Object} params - The parameters to be converted to a FormData object. - * @param {Object} options - The options object passed to the Axios constructor. - * - * @returns {void} - */ -function AxiosURLSearchParams(params, options) { - this._pairs = []; - - params && (0,_toFormData_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params, this, options); -} - -const prototype = AxiosURLSearchParams.prototype; - -prototype.append = function append(name, value) { - this._pairs.push([name, value]); -}; - -prototype.toString = function toString(encoder) { - const _encode = encoder ? function(value) { - return encoder.call(this, value, encode); - } : encode; - - return this._pairs.map(function each(pair) { - return _encode(pair[0]) + '=' + _encode(pair[1]); - }, '').join('&'); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AxiosURLSearchParams); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/HttpStatusCode.js": -/*!**********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/HttpStatusCode.js ***! - \**********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -const HttpStatusCode = { - Continue: 100, - SwitchingProtocols: 101, - Processing: 102, - EarlyHints: 103, - Ok: 200, - Created: 201, - Accepted: 202, - NonAuthoritativeInformation: 203, - NoContent: 204, - ResetContent: 205, - PartialContent: 206, - MultiStatus: 207, - AlreadyReported: 208, - ImUsed: 226, - MultipleChoices: 300, - MovedPermanently: 301, - Found: 302, - SeeOther: 303, - NotModified: 304, - UseProxy: 305, - Unused: 306, - TemporaryRedirect: 307, - PermanentRedirect: 308, - BadRequest: 400, - Unauthorized: 401, - PaymentRequired: 402, - Forbidden: 403, - NotFound: 404, - MethodNotAllowed: 405, - NotAcceptable: 406, - ProxyAuthenticationRequired: 407, - RequestTimeout: 408, - Conflict: 409, - Gone: 410, - LengthRequired: 411, - PreconditionFailed: 412, - PayloadTooLarge: 413, - UriTooLong: 414, - UnsupportedMediaType: 415, - RangeNotSatisfiable: 416, - ExpectationFailed: 417, - ImATeapot: 418, - MisdirectedRequest: 421, - UnprocessableEntity: 422, - Locked: 423, - FailedDependency: 424, - TooEarly: 425, - UpgradeRequired: 426, - PreconditionRequired: 428, - TooManyRequests: 429, - RequestHeaderFieldsTooLarge: 431, - UnavailableForLegalReasons: 451, - InternalServerError: 500, - NotImplemented: 501, - BadGateway: 502, - ServiceUnavailable: 503, - GatewayTimeout: 504, - HttpVersionNotSupported: 505, - VariantAlsoNegotiates: 506, - InsufficientStorage: 507, - LoopDetected: 508, - NotExtended: 510, - NetworkAuthenticationRequired: 511, -}; - -Object.entries(HttpStatusCode).forEach(([key, value]) => { - HttpStatusCode[value] = key; -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HttpStatusCode); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/bind.js": -/*!************************************************!*\ - !*** ./node_modules/axios/lib/helpers/bind.js ***! - \************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ bind) -/* harmony export */ }); - - -function bind(fn, thisArg) { - return function wrap() { - return fn.apply(thisArg, arguments); - }; -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/buildURL.js": -/*!****************************************************!*\ - !*** ./node_modules/axios/lib/helpers/buildURL.js ***! - \****************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ buildURL) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _helpers_AxiosURLSearchParams_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/AxiosURLSearchParams.js */ "./node_modules/axios/lib/helpers/AxiosURLSearchParams.js"); - - - - - -/** - * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their - * URI encoded counterparts - * - * @param {string} val The value to be encoded. - * - * @returns {string} The encoded value. - */ -function encode(val) { - return encodeURIComponent(val). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, '+'). - replace(/%5B/gi, '['). - replace(/%5D/gi, ']'); -} - -/** - * Build a URL by appending params to the end - * - * @param {string} url The base of the url (e.g., http://www.google.com) - * @param {object} [params] The params to be appended - * @param {?(object|Function)} options - * - * @returns {string} The formatted url - */ -function buildURL(url, params, options) { - /*eslint no-param-reassign:0*/ - if (!params) { - return url; - } - - const _encode = options && options.encode || encode; - - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isFunction(options)) { - options = { - serialize: options - }; - } - - const serializeFn = options && options.serialize; - - let serializedParams; - - if (serializeFn) { - serializedParams = serializeFn(params, options); - } else { - serializedParams = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isURLSearchParams(params) ? - params.toString() : - new _helpers_AxiosURLSearchParams_js__WEBPACK_IMPORTED_MODULE_1__["default"](params, options).toString(_encode); - } - - if (serializedParams) { - const hashmarkIndex = url.indexOf("#"); - - if (hashmarkIndex !== -1) { - url = url.slice(0, hashmarkIndex); - } - url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; - } - - return url; -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/combineURLs.js": -/*!*******************************************************!*\ - !*** ./node_modules/axios/lib/helpers/combineURLs.js ***! - \*******************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ combineURLs) -/* harmony export */ }); - - -/** - * Creates a new URL by combining the specified URLs - * - * @param {string} baseURL The base URL - * @param {string} relativeURL The relative URL - * - * @returns {string} The combined URL - */ -function combineURLs(baseURL, relativeURL) { - return relativeURL - ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') - : baseURL; -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/composeSignals.js": -/*!**********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/composeSignals.js ***! - \**********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../cancel/CanceledError.js */ "./node_modules/axios/lib/cancel/CanceledError.js"); -/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/AxiosError.js */ "./node_modules/axios/lib/core/AxiosError.js"); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); - - - - -const composeSignals = (signals, timeout) => { - const {length} = (signals = signals ? signals.filter(Boolean) : []); - - if (timeout || length) { - let controller = new AbortController(); - - let aborted; - - const onabort = function (reason) { - if (!aborted) { - aborted = true; - unsubscribe(); - const err = reason instanceof Error ? reason : this.reason; - controller.abort(err instanceof _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__["default"] ? err : new _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_1__["default"](err instanceof Error ? err.message : err)); - } - } - - let timer = timeout && setTimeout(() => { - timer = null; - onabort(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__["default"](`timeout ${timeout} of ms exceeded`, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__["default"].ETIMEDOUT)) - }, timeout) - - const unsubscribe = () => { - if (signals) { - timer && clearTimeout(timer); - timer = null; - signals.forEach(signal => { - signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); - }); - signals = null; - } - } - - signals.forEach((signal) => signal.addEventListener('abort', onabort)); - - const {signal} = controller; - - signal.unsubscribe = () => _utils_js__WEBPACK_IMPORTED_MODULE_2__["default"].asap(unsubscribe); - - return signal; - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (composeSignals); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/cookies.js": -/*!***************************************************!*\ - !*** ./node_modules/axios/lib/helpers/cookies.js ***! - \***************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../platform/index.js */ "./node_modules/axios/lib/platform/index.js"); - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_platform_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].hasStandardBrowserEnv ? - - // Standard browser envs support document.cookie - { - write(name, value, expires, path, domain, secure) { - const cookie = [name + '=' + encodeURIComponent(value)]; - - _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString()); - - _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isString(path) && cookie.push('path=' + path); - - _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"].isString(domain) && cookie.push('domain=' + domain); - - secure === true && cookie.push('secure'); - - document.cookie = cookie.join('; '); - }, - - read(name) { - const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); - return (match ? decodeURIComponent(match[3]) : null); - }, - - remove(name) { - this.write(name, '', Date.now() - 86400000); - } - } - - : - - // Non-standard browser env (web workers, react-native) lack needed support. - { - write() {}, - read() { - return null; - }, - remove() {} - }); - - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/formDataToJSON.js": -/*!**********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/formDataToJSON.js ***! - \**********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); - - - - -/** - * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] - * - * @param {string} name - The name of the property to get. - * - * @returns An array of strings. - */ -function parsePropPath(name) { - // foo[x][y][z] - // foo.x.y.z - // foo-x-y-z - // foo x y z - return _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].matchAll(/\w+|\[(\w*)]/g, name).map(match => { - return match[0] === '[]' ? '' : match[1] || match[0]; - }); -} - -/** - * Convert an array to an object. - * - * @param {Array} arr - The array to convert to an object. - * - * @returns An object with the same keys and values as the array. - */ -function arrayToObject(arr) { - const obj = {}; - const keys = Object.keys(arr); - let i; - const len = keys.length; - let key; - for (i = 0; i < len; i++) { - key = keys[i]; - obj[key] = arr[key]; - } - return obj; -} - -/** - * It takes a FormData object and returns a JavaScript object - * - * @param {string} formData The FormData object to convert to JSON. - * - * @returns {Object | null} The converted object. - */ -function formDataToJSON(formData) { - function buildPath(path, value, target, index) { - let name = path[index++]; - - if (name === '__proto__') return true; - - const isNumericKey = Number.isFinite(+name); - const isLast = index >= path.length; - name = !name && _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArray(target) ? target.length : name; - - if (isLast) { - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].hasOwnProp(target, name)) { - target[name] = [target[name], value]; - } else { - target[name] = value; - } - - return !isNumericKey; - } - - if (!target[name] || !_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isObject(target[name])) { - target[name] = []; - } - - const result = buildPath(path, value, target[name], index); - - if (result && _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArray(target[name])) { - target[name] = arrayToObject(target[name]); - } - - return !isNumericKey; - } - - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isFormData(formData) && _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isFunction(formData.entries)) { - const obj = {}; - - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].forEachEntry(formData, (name, value) => { - buildPath(parsePropPath(name), value, obj, 0); - }); - - return obj; - } - - return null; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (formDataToJSON); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js": -/*!*********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***! - \*********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ isAbsoluteURL) -/* harmony export */ }); - - -/** - * Determines whether the specified URL is absolute - * - * @param {string} url The URL to test - * - * @returns {boolean} True if the specified URL is absolute, otherwise false - */ -function isAbsoluteURL(url) { - // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). - // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed - // by any combination of letters, digits, plus, period, or hyphen. - return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/isAxiosError.js": -/*!********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***! - \********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ isAxiosError) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../utils.js */ "./node_modules/axios/lib/utils.js"); - - - - -/** - * Determines whether the payload is an error thrown by Axios - * - * @param {*} payload The value to test - * - * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false - */ -function isAxiosError(payload) { - return _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isObject(payload) && (payload.isAxiosError === true); -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js": -/*!***********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***! - \***********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../platform/index.js */ "./node_modules/axios/lib/platform/index.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_platform_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => { - url = new URL(url, _platform_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].origin); - - return ( - origin.protocol === url.protocol && - origin.host === url.host && - (isMSIE || origin.port === url.port) - ); -})( - new URL(_platform_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].origin), - _platform_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].navigator && /(msie|trident)/i.test(_platform_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].navigator.userAgent) -) : () => true); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/null.js": -/*!************************************************!*\ - !*** ./node_modules/axios/lib/helpers/null.js ***! - \************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -// eslint-disable-next-line strict -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (null); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/parseHeaders.js": -/*!********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***! - \********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../utils.js */ "./node_modules/axios/lib/utils.js"); - - - - -// RawAxiosHeaders whose duplicates are ignored by node -// c.f. https://nodejs.org/api/http.html#http_message_headers -const ignoreDuplicateOf = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].toObjectSet([ - 'age', 'authorization', 'content-length', 'content-type', 'etag', - 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', - 'last-modified', 'location', 'max-forwards', 'proxy-authorization', - 'referer', 'retry-after', 'user-agent' -]); - -/** - * Parse headers into an object - * - * ``` - * Date: Wed, 27 Aug 2014 08:58:49 GMT - * Content-Type: application/json - * Connection: keep-alive - * Transfer-Encoding: chunked - * ``` - * - * @param {String} rawHeaders Headers needing to be parsed - * - * @returns {Object} Headers parsed into an object - */ -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (rawHeaders => { - const parsed = {}; - let key; - let val; - let i; - - rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { - i = line.indexOf(':'); - key = line.substring(0, i).trim().toLowerCase(); - val = line.substring(i + 1).trim(); - - if (!key || (parsed[key] && ignoreDuplicateOf[key])) { - return; - } - - if (key === 'set-cookie') { - if (parsed[key]) { - parsed[key].push(val); - } else { - parsed[key] = [val]; - } - } else { - parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; - } - }); - - return parsed; -}); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/parseProtocol.js": -/*!*********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/parseProtocol.js ***! - \*********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ parseProtocol) -/* harmony export */ }); - - -function parseProtocol(url) { - const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); - return match && match[1] || ''; -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/progressEventReducer.js": -/*!****************************************************************!*\ - !*** ./node_modules/axios/lib/helpers/progressEventReducer.js ***! - \****************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ asyncDecorator: () => (/* binding */ asyncDecorator), -/* harmony export */ progressEventDecorator: () => (/* binding */ progressEventDecorator), -/* harmony export */ progressEventReducer: () => (/* binding */ progressEventReducer) -/* harmony export */ }); -/* harmony import */ var _speedometer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./speedometer.js */ "./node_modules/axios/lib/helpers/speedometer.js"); -/* harmony import */ var _throttle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./throttle.js */ "./node_modules/axios/lib/helpers/throttle.js"); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); - - - - -const progressEventReducer = (listener, isDownloadStream, freq = 3) => { - let bytesNotified = 0; - const _speedometer = (0,_speedometer_js__WEBPACK_IMPORTED_MODULE_0__["default"])(50, 250); - - return (0,_throttle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(e => { - const loaded = e.loaded; - const total = e.lengthComputable ? e.total : undefined; - const progressBytes = loaded - bytesNotified; - const rate = _speedometer(progressBytes); - const inRange = loaded <= total; - - bytesNotified = loaded; - - const data = { - loaded, - total, - progress: total ? (loaded / total) : undefined, - bytes: progressBytes, - rate: rate ? rate : undefined, - estimated: rate && total && inRange ? (total - loaded) / rate : undefined, - event: e, - lengthComputable: total != null, - [isDownloadStream ? 'download' : 'upload']: true - }; - - listener(data); - }, freq); -} - -const progressEventDecorator = (total, throttled) => { - const lengthComputable = total != null; - - return [(loaded) => throttled[0]({ - lengthComputable, - total, - loaded - }), throttled[1]]; -} - -const asyncDecorator = (fn) => (...args) => _utils_js__WEBPACK_IMPORTED_MODULE_2__["default"].asap(() => fn(...args)); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/resolveConfig.js": -/*!*********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/resolveConfig.js ***! - \*********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../platform/index.js */ "./node_modules/axios/lib/platform/index.js"); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _isURLSameOrigin_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isURLSameOrigin.js */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js"); -/* harmony import */ var _cookies_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./cookies.js */ "./node_modules/axios/lib/helpers/cookies.js"); -/* harmony import */ var _core_buildFullPath_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/buildFullPath.js */ "./node_modules/axios/lib/core/buildFullPath.js"); -/* harmony import */ var _core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/mergeConfig.js */ "./node_modules/axios/lib/core/mergeConfig.js"); -/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ "./node_modules/axios/lib/core/AxiosHeaders.js"); -/* harmony import */ var _buildURL_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./buildURL.js */ "./node_modules/axios/lib/helpers/buildURL.js"); - - - - - - - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((config) => { - const newConfig = (0,_core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_0__["default"])({}, config); - - let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig; - - newConfig.headers = headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__["default"].from(headers); - - newConfig.url = (0,_buildURL_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_core_buildFullPath_js__WEBPACK_IMPORTED_MODULE_3__["default"])(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer); - - // HTTP basic authentication - if (auth) { - headers.set('Authorization', 'Basic ' + - btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : '')) - ); - } - - let contentType; - - if (_utils_js__WEBPACK_IMPORTED_MODULE_4__["default"].isFormData(data)) { - if (_platform_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].hasStandardBrowserEnv || _platform_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].hasStandardBrowserWebWorkerEnv) { - headers.setContentType(undefined); // Let the browser set it - } else if ((contentType = headers.getContentType()) !== false) { - // fix semicolon duplication issue for ReactNative FormData implementation - const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : []; - headers.setContentType([type || 'multipart/form-data', ...tokens].join('; ')); - } - } - - // Add xsrf header - // This is only done if running in a standard browser environment. - // Specifically not if we're in a web worker, or react-native. - - if (_platform_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].hasStandardBrowserEnv) { - withXSRFToken && _utils_js__WEBPACK_IMPORTED_MODULE_4__["default"].isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); - - if (withXSRFToken || (withXSRFToken !== false && (0,_isURLSameOrigin_js__WEBPACK_IMPORTED_MODULE_6__["default"])(newConfig.url))) { - // Add xsrf header - const xsrfValue = xsrfHeaderName && xsrfCookieName && _cookies_js__WEBPACK_IMPORTED_MODULE_7__["default"].read(xsrfCookieName); - - if (xsrfValue) { - headers.set(xsrfHeaderName, xsrfValue); - } - } - } - - return newConfig; -}); - - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/speedometer.js": -/*!*******************************************************!*\ - !*** ./node_modules/axios/lib/helpers/speedometer.js ***! - \*******************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); - - -/** - * Calculate data maxRate - * @param {Number} [samplesCount= 10] - * @param {Number} [min= 1000] - * @returns {Function} - */ -function speedometer(samplesCount, min) { - samplesCount = samplesCount || 10; - const bytes = new Array(samplesCount); - const timestamps = new Array(samplesCount); - let head = 0; - let tail = 0; - let firstSampleTS; - - min = min !== undefined ? min : 1000; - - return function push(chunkLength) { - const now = Date.now(); - - const startedAt = timestamps[tail]; - - if (!firstSampleTS) { - firstSampleTS = now; - } - - bytes[head] = chunkLength; - timestamps[head] = now; - - let i = tail; - let bytesCount = 0; - - while (i !== head) { - bytesCount += bytes[i++]; - i = i % samplesCount; - } - - head = (head + 1) % samplesCount; - - if (head === tail) { - tail = (tail + 1) % samplesCount; - } - - if (now - firstSampleTS < min) { - return; - } - - const passed = startedAt && now - startedAt; - - return passed ? Math.round(bytesCount * 1000 / passed) : undefined; - }; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (speedometer); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/spread.js": -/*!**************************************************!*\ - !*** ./node_modules/axios/lib/helpers/spread.js ***! - \**************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ spread) -/* harmony export */ }); - - -/** - * Syntactic sugar for invoking a function and expanding an array for arguments. - * - * Common use case would be to use `Function.prototype.apply`. - * - * ```js - * function f(x, y, z) {} - * var args = [1, 2, 3]; - * f.apply(null, args); - * ``` - * - * With `spread` this example can be re-written. - * - * ```js - * spread(function(x, y, z) {})([1, 2, 3]); - * ``` - * - * @param {Function} callback - * - * @returns {Function} - */ -function spread(callback) { - return function wrap(arr) { - return callback.apply(null, arr); - }; -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/throttle.js": -/*!****************************************************!*\ - !*** ./node_modules/axios/lib/helpers/throttle.js ***! - \****************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Throttle decorator - * @param {Function} fn - * @param {Number} freq - * @return {Function} - */ -function throttle(fn, freq) { - let timestamp = 0; - let threshold = 1000 / freq; - let lastArgs; - let timer; - - const invoke = (args, now = Date.now()) => { - timestamp = now; - lastArgs = null; - if (timer) { - clearTimeout(timer); - timer = null; - } - fn.apply(null, args); - } - - const throttled = (...args) => { - const now = Date.now(); - const passed = now - timestamp; - if ( passed >= threshold) { - invoke(args, now); - } else { - lastArgs = args; - if (!timer) { - timer = setTimeout(() => { - timer = null; - invoke(lastArgs) - }, threshold - passed); - } - } - } - - const flush = () => lastArgs && invoke(lastArgs); - - return [throttled, flush]; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (throttle); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/toFormData.js": -/*!******************************************************!*\ - !*** ./node_modules/axios/lib/helpers/toFormData.js ***! - \******************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/AxiosError.js */ "./node_modules/axios/lib/core/AxiosError.js"); -/* harmony import */ var _platform_node_classes_FormData_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../platform/node/classes/FormData.js */ "./node_modules/axios/lib/helpers/null.js"); - - - - -// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored - - -/** - * Determines if the given thing is a array or js object. - * - * @param {string} thing - The object or array to be visited. - * - * @returns {boolean} - */ -function isVisitable(thing) { - return _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isPlainObject(thing) || _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArray(thing); -} - -/** - * It removes the brackets from the end of a string - * - * @param {string} key - The key of the parameter. - * - * @returns {string} the key without the brackets. - */ -function removeBrackets(key) { - return _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].endsWith(key, '[]') ? key.slice(0, -2) : key; -} - -/** - * It takes a path, a key, and a boolean, and returns a string - * - * @param {string} path - The path to the current key. - * @param {string} key - The key of the current object being iterated over. - * @param {string} dots - If true, the key will be rendered with dots instead of brackets. - * - * @returns {string} The path to the current key. - */ -function renderKey(path, key, dots) { - if (!path) return key; - return path.concat(key).map(function each(token, i) { - // eslint-disable-next-line no-param-reassign - token = removeBrackets(token); - return !dots && i ? '[' + token + ']' : token; - }).join(dots ? '.' : ''); -} - -/** - * If the array is an array and none of its elements are visitable, then it's a flat array. - * - * @param {Array} arr - The array to check - * - * @returns {boolean} - */ -function isFlatArray(arr) { - return _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArray(arr) && !arr.some(isVisitable); -} - -const predicates = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].toFlatObject(_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"], {}, null, function filter(prop) { - return /^is[A-Z]/.test(prop); -}); - -/** - * Convert a data object to FormData - * - * @param {Object} obj - * @param {?Object} [formData] - * @param {?Object} [options] - * @param {Function} [options.visitor] - * @param {Boolean} [options.metaTokens = true] - * @param {Boolean} [options.dots = false] - * @param {?Boolean} [options.indexes = false] - * - * @returns {Object} - **/ - -/** - * It converts an object into a FormData object - * - * @param {Object} obj - The object to convert to form data. - * @param {string} formData - The FormData object to append to. - * @param {Object} options - * - * @returns - */ -function toFormData(obj, formData, options) { - if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isObject(obj)) { - throw new TypeError('target must be an object'); - } - - // eslint-disable-next-line no-param-reassign - formData = formData || new (_platform_node_classes_FormData_js__WEBPACK_IMPORTED_MODULE_1__["default"] || FormData)(); - - // eslint-disable-next-line no-param-reassign - options = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].toFlatObject(options, { - metaTokens: true, - dots: false, - indexes: false - }, false, function defined(option, source) { - // eslint-disable-next-line no-eq-null,eqeqeq - return !_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isUndefined(source[option]); - }); - - const metaTokens = options.metaTokens; - // eslint-disable-next-line no-use-before-define - const visitor = options.visitor || defaultVisitor; - const dots = options.dots; - const indexes = options.indexes; - const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; - const useBlob = _Blob && _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isSpecCompliantForm(formData); - - if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isFunction(visitor)) { - throw new TypeError('visitor must be a function'); - } - - function convertValue(value) { - if (value === null) return ''; - - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isDate(value)) { - return value.toISOString(); - } - - if (!useBlob && _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isBlob(value)) { - throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__["default"]('Blob is not supported. Use a Buffer instead.'); - } - - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArrayBuffer(value) || _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isTypedArray(value)) { - return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); - } - - return value; - } - - /** - * Default visitor. - * - * @param {*} value - * @param {String|Number} key - * @param {Array} path - * @this {FormData} - * - * @returns {boolean} return true to visit the each prop of the value recursively - */ - function defaultVisitor(value, key, path) { - let arr = value; - - if (value && !path && typeof value === 'object') { - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].endsWith(key, '{}')) { - // eslint-disable-next-line no-param-reassign - key = metaTokens ? key : key.slice(0, -2); - // eslint-disable-next-line no-param-reassign - value = JSON.stringify(value); - } else if ( - (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArray(value) && isFlatArray(value)) || - ((_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isFileList(value) || _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].endsWith(key, '[]')) && (arr = _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].toArray(value)) - )) { - // eslint-disable-next-line no-param-reassign - key = removeBrackets(key); - - arr.forEach(function each(el, index) { - !(_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isUndefined(el) || el === null) && formData.append( - // eslint-disable-next-line no-nested-ternary - indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), - convertValue(el) - ); - }); - return false; - } - } - - if (isVisitable(value)) { - return true; - } - - formData.append(renderKey(path, key, dots), convertValue(value)); - - return false; - } - - const stack = []; - - const exposedHelpers = Object.assign(predicates, { - defaultVisitor, - convertValue, - isVisitable - }); - - function build(value, path) { - if (_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isUndefined(value)) return; - - if (stack.indexOf(value) !== -1) { - throw Error('Circular reference detected in ' + path.join('.')); - } - - stack.push(value); - - _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].forEach(value, function each(el, key) { - const result = !(_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isUndefined(el) || el === null) && visitor.call( - formData, el, _utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isString(key) ? key.trim() : key, path, exposedHelpers - ); - - if (result === true) { - build(el, path ? path.concat(key) : [key]); - } - }); - - stack.pop(); - } - - if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__["default"].isObject(obj)) { - throw new TypeError('data must be an object'); - } - - build(obj); - - return formData; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toFormData); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/toURLEncodedForm.js": -/*!************************************************************!*\ - !*** ./node_modules/axios/lib/helpers/toURLEncodedForm.js ***! - \************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ toURLEncodedForm) -/* harmony export */ }); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.js */ "./node_modules/axios/lib/utils.js"); -/* harmony import */ var _toFormData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toFormData.js */ "./node_modules/axios/lib/helpers/toFormData.js"); -/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../platform/index.js */ "./node_modules/axios/lib/platform/index.js"); - - - - - - -function toURLEncodedForm(data, options) { - return (0,_toFormData_js__WEBPACK_IMPORTED_MODULE_0__["default"])(data, new _platform_index_js__WEBPACK_IMPORTED_MODULE_1__["default"].classes.URLSearchParams(), Object.assign({ - visitor: function(value, key, path, helpers) { - if (_platform_index_js__WEBPACK_IMPORTED_MODULE_1__["default"].isNode && _utils_js__WEBPACK_IMPORTED_MODULE_2__["default"].isBuffer(value)) { - this.append(key, value.toString('base64')); - return false; - } - - return helpers.defaultVisitor.apply(this, arguments); - } - }, options)); -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/trackStream.js": -/*!*******************************************************!*\ - !*** ./node_modules/axios/lib/helpers/trackStream.js ***! - \*******************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ readBytes: () => (/* binding */ readBytes), -/* harmony export */ streamChunk: () => (/* binding */ streamChunk), -/* harmony export */ trackStream: () => (/* binding */ trackStream) -/* harmony export */ }); - -const streamChunk = function* (chunk, chunkSize) { - let len = chunk.byteLength; - - if (!chunkSize || len < chunkSize) { - yield chunk; - return; - } - - let pos = 0; - let end; - - while (pos < len) { - end = pos + chunkSize; - yield chunk.slice(pos, end); - pos = end; - } -} - -const readBytes = async function* (iterable, chunkSize) { - for await (const chunk of readStream(iterable)) { - yield* streamChunk(chunk, chunkSize); - } -} - -const readStream = async function* (stream) { - if (stream[Symbol.asyncIterator]) { - yield* stream; - return; - } - - const reader = stream.getReader(); - try { - for (;;) { - const {done, value} = await reader.read(); - if (done) { - break; - } - yield value; - } - } finally { - await reader.cancel(); - } -} - -const trackStream = (stream, chunkSize, onProgress, onFinish) => { - const iterator = readBytes(stream, chunkSize); - - let bytes = 0; - let done; - let _onFinish = (e) => { - if (!done) { - done = true; - onFinish && onFinish(e); - } - } - - return new ReadableStream({ - async pull(controller) { - try { - const {done, value} = await iterator.next(); - - if (done) { - _onFinish(); - controller.close(); - return; - } - - let len = value.byteLength; - if (onProgress) { - let loadedBytes = bytes += len; - onProgress(loadedBytes); - } - controller.enqueue(new Uint8Array(value)); - } catch (err) { - _onFinish(err); - throw err; - } - }, - cancel(reason) { - _onFinish(reason); - return iterator.return(); - } - }, { - highWaterMark: 2 - }) -} - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/validator.js": -/*!*****************************************************!*\ - !*** ./node_modules/axios/lib/helpers/validator.js ***! - \*****************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _env_data_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../env/data.js */ "./node_modules/axios/lib/env/data.js"); -/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosError.js */ "./node_modules/axios/lib/core/AxiosError.js"); - - - - - -const validators = {}; - -// eslint-disable-next-line func-names -['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => { - validators[type] = function validator(thing) { - return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; - }; -}); - -const deprecatedWarnings = {}; - -/** - * Transitional option validator - * - * @param {function|boolean?} validator - set to false if the transitional option has been removed - * @param {string?} version - deprecated version / removed since version - * @param {string?} message - some message with additional info - * - * @returns {function} - */ -validators.transitional = function transitional(validator, version, message) { - function formatMessage(opt, desc) { - return '[Axios v' + _env_data_js__WEBPACK_IMPORTED_MODULE_0__.VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); - } - - // eslint-disable-next-line func-names - return (value, opt, opts) => { - if (validator === false) { - throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__["default"]( - formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), - _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__["default"].ERR_DEPRECATED - ); - } - - if (version && !deprecatedWarnings[opt]) { - deprecatedWarnings[opt] = true; - // eslint-disable-next-line no-console - console.warn( - formatMessage( - opt, - ' has been deprecated since v' + version + ' and will be removed in the near future' - ) - ); - } - - return validator ? validator(value, opt, opts) : true; - }; -}; - -validators.spelling = function spelling(correctSpelling) { - return (value, opt) => { - // eslint-disable-next-line no-console - console.warn(`${opt} is likely a misspelling of ${correctSpelling}`); - return true; - } -}; - -/** - * Assert object's properties type - * - * @param {object} options - * @param {object} schema - * @param {boolean?} allowUnknown - * - * @returns {object} - */ - -function assertOptions(options, schema, allowUnknown) { - if (typeof options !== 'object') { - throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__["default"]('options must be an object', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__["default"].ERR_BAD_OPTION_VALUE); - } - const keys = Object.keys(options); - let i = keys.length; - while (i-- > 0) { - const opt = keys[i]; - const validator = schema[opt]; - if (validator) { - const value = options[opt]; - const result = value === undefined || validator(value, opt, options); - if (result !== true) { - throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__["default"]('option ' + opt + ' must be ' + result, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__["default"].ERR_BAD_OPTION_VALUE); - } - continue; - } - if (allowUnknown !== true) { - throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__["default"]('Unknown option ' + opt, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__["default"].ERR_BAD_OPTION); - } - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - assertOptions, - validators -}); - - -/***/ }), - -/***/ "./node_modules/axios/lib/platform/browser/classes/Blob.js": -/*!*****************************************************************!*\ - !*** ./node_modules/axios/lib/platform/browser/classes/Blob.js ***! - \*****************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (typeof Blob !== 'undefined' ? Blob : null); - - -/***/ }), - -/***/ "./node_modules/axios/lib/platform/browser/classes/FormData.js": -/*!*********************************************************************!*\ - !*** ./node_modules/axios/lib/platform/browser/classes/FormData.js ***! - \*********************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (typeof FormData !== 'undefined' ? FormData : null); - - -/***/ }), - -/***/ "./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js": -/*!****************************************************************************!*\ - !*** ./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js ***! - \****************************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _helpers_AxiosURLSearchParams_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../helpers/AxiosURLSearchParams.js */ "./node_modules/axios/lib/helpers/AxiosURLSearchParams.js"); - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (typeof URLSearchParams !== 'undefined' ? URLSearchParams : _helpers_AxiosURLSearchParams_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - - -/***/ }), - -/***/ "./node_modules/axios/lib/platform/browser/index.js": -/*!**********************************************************!*\ - !*** ./node_modules/axios/lib/platform/browser/index.js ***! - \**********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _classes_URLSearchParams_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./classes/URLSearchParams.js */ "./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js"); -/* harmony import */ var _classes_FormData_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./classes/FormData.js */ "./node_modules/axios/lib/platform/browser/classes/FormData.js"); -/* harmony import */ var _classes_Blob_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./classes/Blob.js */ "./node_modules/axios/lib/platform/browser/classes/Blob.js"); - - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - isBrowser: true, - classes: { - URLSearchParams: _classes_URLSearchParams_js__WEBPACK_IMPORTED_MODULE_0__["default"], - FormData: _classes_FormData_js__WEBPACK_IMPORTED_MODULE_1__["default"], - Blob: _classes_Blob_js__WEBPACK_IMPORTED_MODULE_2__["default"] - }, - protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] -}); - - -/***/ }), - -/***/ "./node_modules/axios/lib/platform/common/utils.js": -/*!*********************************************************!*\ - !*** ./node_modules/axios/lib/platform/common/utils.js ***! - \*********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ hasBrowserEnv: () => (/* binding */ hasBrowserEnv), -/* harmony export */ hasStandardBrowserEnv: () => (/* binding */ hasStandardBrowserEnv), -/* harmony export */ hasStandardBrowserWebWorkerEnv: () => (/* binding */ hasStandardBrowserWebWorkerEnv), -/* harmony export */ navigator: () => (/* binding */ _navigator), -/* harmony export */ origin: () => (/* binding */ origin) -/* harmony export */ }); -const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; - -const _navigator = typeof navigator === 'object' && navigator || undefined; - -/** - * Determine if we're running in a standard browser environment - * - * This allows axios to run in a web worker, and react-native. - * Both environments support XMLHttpRequest, but not fully standard globals. - * - * web workers: - * typeof window -> undefined - * typeof document -> undefined - * - * react-native: - * navigator.product -> 'ReactNative' - * nativescript - * navigator.product -> 'NativeScript' or 'NS' - * - * @returns {boolean} - */ -const hasStandardBrowserEnv = hasBrowserEnv && - (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); - -/** - * Determine if we're running in a standard browser webWorker environment - * - * Although the `isStandardBrowserEnv` method indicates that - * `allows axios to run in a web worker`, the WebWorker will still be - * filtered out due to its judgment standard - * `typeof window !== 'undefined' && typeof document !== 'undefined'`. - * This leads to a problem when axios post `FormData` in webWorker - */ -const hasStandardBrowserWebWorkerEnv = (() => { - return ( - typeof WorkerGlobalScope !== 'undefined' && - // eslint-disable-next-line no-undef - self instanceof WorkerGlobalScope && - typeof self.importScripts === 'function' - ); -})(); - -const origin = hasBrowserEnv && window.location.href || 'http://localhost'; - - - - -/***/ }), - -/***/ "./node_modules/axios/lib/platform/index.js": -/*!**************************************************!*\ - !*** ./node_modules/axios/lib/platform/index.js ***! - \**************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node/index.js */ "./node_modules/axios/lib/platform/browser/index.js"); -/* harmony import */ var _common_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common/utils.js */ "./node_modules/axios/lib/platform/common/utils.js"); - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - ..._common_utils_js__WEBPACK_IMPORTED_MODULE_0__, - ..._node_index_js__WEBPACK_IMPORTED_MODULE_1__["default"] -}); - - -/***/ }), - -/***/ "./node_modules/axios/lib/utils.js": -/*!*****************************************!*\ - !*** ./node_modules/axios/lib/utils.js ***! - \*****************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _helpers_bind_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/bind.js */ "./node_modules/axios/lib/helpers/bind.js"); - - - - -// utils is a library of generic helper functions non-specific to axios - -const {toString} = Object.prototype; -const {getPrototypeOf} = Object; - -const kindOf = (cache => thing => { - const str = toString.call(thing); - return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); -})(Object.create(null)); - -const kindOfTest = (type) => { - type = type.toLowerCase(); - return (thing) => kindOf(thing) === type -} - -const typeOfTest = type => thing => typeof thing === type; - -/** - * Determine if a value is an Array - * - * @param {Object} val The value to test - * - * @returns {boolean} True if value is an Array, otherwise false - */ -const {isArray} = Array; - -/** - * Determine if a value is undefined - * - * @param {*} val The value to test - * - * @returns {boolean} True if the value is undefined, otherwise false - */ -const isUndefined = typeOfTest('undefined'); - -/** - * Determine if a value is a Buffer - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is a Buffer, otherwise false - */ -function isBuffer(val) { - return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) - && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val); -} - -/** - * Determine if a value is an ArrayBuffer - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is an ArrayBuffer, otherwise false - */ -const isArrayBuffer = kindOfTest('ArrayBuffer'); - - -/** - * Determine if a value is a view on an ArrayBuffer - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false - */ -function isArrayBufferView(val) { - let result; - if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { - result = ArrayBuffer.isView(val); - } else { - result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); - } - return result; -} - -/** - * Determine if a value is a String - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is a String, otherwise false - */ -const isString = typeOfTest('string'); - -/** - * Determine if a value is a Function - * - * @param {*} val The value to test - * @returns {boolean} True if value is a Function, otherwise false - */ -const isFunction = typeOfTest('function'); - -/** - * Determine if a value is a Number - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is a Number, otherwise false - */ -const isNumber = typeOfTest('number'); - -/** - * Determine if a value is an Object - * - * @param {*} thing The value to test - * - * @returns {boolean} True if value is an Object, otherwise false - */ -const isObject = (thing) => thing !== null && typeof thing === 'object'; - -/** - * Determine if a value is a Boolean - * - * @param {*} thing The value to test - * @returns {boolean} True if value is a Boolean, otherwise false - */ -const isBoolean = thing => thing === true || thing === false; - -/** - * Determine if a value is a plain Object - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is a plain Object, otherwise false - */ -const isPlainObject = (val) => { - if (kindOf(val) !== 'object') { - return false; - } - - const prototype = getPrototypeOf(val); - return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val); -} - -/** - * Determine if a value is a Date - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is a Date, otherwise false - */ -const isDate = kindOfTest('Date'); - -/** - * Determine if a value is a File - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is a File, otherwise false - */ -const isFile = kindOfTest('File'); - -/** - * Determine if a value is a Blob - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is a Blob, otherwise false - */ -const isBlob = kindOfTest('Blob'); - -/** - * Determine if a value is a FileList - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is a File, otherwise false - */ -const isFileList = kindOfTest('FileList'); - -/** - * Determine if a value is a Stream - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is a Stream, otherwise false - */ -const isStream = (val) => isObject(val) && isFunction(val.pipe); - -/** - * Determine if a value is a FormData - * - * @param {*} thing The value to test - * - * @returns {boolean} True if value is an FormData, otherwise false - */ -const isFormData = (thing) => { - let kind; - return thing && ( - (typeof FormData === 'function' && thing instanceof FormData) || ( - isFunction(thing.append) && ( - (kind = kindOf(thing)) === 'formdata' || - // detect form-data instance - (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]') - ) - ) - ) -} - -/** - * Determine if a value is a URLSearchParams object - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is a URLSearchParams object, otherwise false - */ -const isURLSearchParams = kindOfTest('URLSearchParams'); - -const [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest); - -/** - * Trim excess whitespace off the beginning and end of a string - * - * @param {String} str The String to trim - * - * @returns {String} The String freed of excess whitespace - */ -const trim = (str) => str.trim ? - str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - -/** - * Iterate over an Array or an Object invoking a function for each item. - * - * If `obj` is an Array callback will be called passing - * the value, index, and complete array for each item. - * - * If 'obj' is an Object callback will be called passing - * the value, key, and complete object for each property. - * - * @param {Object|Array} obj The object to iterate - * @param {Function} fn The callback to invoke for each item - * - * @param {Boolean} [allOwnKeys = false] - * @returns {any} - */ -function forEach(obj, fn, {allOwnKeys = false} = {}) { - // Don't bother if no value provided - if (obj === null || typeof obj === 'undefined') { - return; - } - - let i; - let l; - - // Force an array if not already something iterable - if (typeof obj !== 'object') { - /*eslint no-param-reassign:0*/ - obj = [obj]; - } - - if (isArray(obj)) { - // Iterate over array values - for (i = 0, l = obj.length; i < l; i++) { - fn.call(null, obj[i], i, obj); - } - } else { - // Iterate over object keys - const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); - const len = keys.length; - let key; - - for (i = 0; i < len; i++) { - key = keys[i]; - fn.call(null, obj[key], key, obj); - } - } -} - -function findKey(obj, key) { - key = key.toLowerCase(); - const keys = Object.keys(obj); - let i = keys.length; - let _key; - while (i-- > 0) { - _key = keys[i]; - if (key === _key.toLowerCase()) { - return _key; - } - } - return null; -} - -const _global = (() => { - /*eslint no-undef:0*/ - if (typeof globalThis !== "undefined") return globalThis; - return typeof self !== "undefined" ? self : (typeof window !== 'undefined' ? window : global) -})(); - -const isContextDefined = (context) => !isUndefined(context) && context !== _global; - -/** - * Accepts varargs expecting each argument to be an object, then - * immutably merges the properties of each object and returns result. - * - * When multiple objects contain the same key the later object in - * the arguments list will take precedence. - * - * Example: - * - * ```js - * var result = merge({foo: 123}, {foo: 456}); - * console.log(result.foo); // outputs 456 - * ``` - * - * @param {Object} obj1 Object to merge - * - * @returns {Object} Result of all merge properties - */ -function merge(/* obj1, obj2, obj3, ... */) { - const {caseless} = isContextDefined(this) && this || {}; - const result = {}; - const assignValue = (val, key) => { - const targetKey = caseless && findKey(result, key) || key; - if (isPlainObject(result[targetKey]) && isPlainObject(val)) { - result[targetKey] = merge(result[targetKey], val); - } else if (isPlainObject(val)) { - result[targetKey] = merge({}, val); - } else if (isArray(val)) { - result[targetKey] = val.slice(); - } else { - result[targetKey] = val; - } - } - - for (let i = 0, l = arguments.length; i < l; i++) { - arguments[i] && forEach(arguments[i], assignValue); - } - return result; -} - -/** - * Extends object a by mutably adding to it the properties of object b. - * - * @param {Object} a The object to be extended - * @param {Object} b The object to copy properties from - * @param {Object} thisArg The object to bind function to - * - * @param {Boolean} [allOwnKeys] - * @returns {Object} The resulting value of object a - */ -const extend = (a, b, thisArg, {allOwnKeys}= {}) => { - forEach(b, (val, key) => { - if (thisArg && isFunction(val)) { - a[key] = (0,_helpers_bind_js__WEBPACK_IMPORTED_MODULE_0__["default"])(val, thisArg); - } else { - a[key] = val; - } - }, {allOwnKeys}); - return a; -} - -/** - * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) - * - * @param {string} content with BOM - * - * @returns {string} content value without BOM - */ -const stripBOM = (content) => { - if (content.charCodeAt(0) === 0xFEFF) { - content = content.slice(1); - } - return content; -} - -/** - * Inherit the prototype methods from one constructor into another - * @param {function} constructor - * @param {function} superConstructor - * @param {object} [props] - * @param {object} [descriptors] - * - * @returns {void} - */ -const inherits = (constructor, superConstructor, props, descriptors) => { - constructor.prototype = Object.create(superConstructor.prototype, descriptors); - constructor.prototype.constructor = constructor; - Object.defineProperty(constructor, 'super', { - value: superConstructor.prototype - }); - props && Object.assign(constructor.prototype, props); -} - -/** - * Resolve object with deep prototype chain to a flat object - * @param {Object} sourceObj source object - * @param {Object} [destObj] - * @param {Function|Boolean} [filter] - * @param {Function} [propFilter] - * - * @returns {Object} - */ -const toFlatObject = (sourceObj, destObj, filter, propFilter) => { - let props; - let i; - let prop; - const merged = {}; - - destObj = destObj || {}; - // eslint-disable-next-line no-eq-null,eqeqeq - if (sourceObj == null) return destObj; - - do { - props = Object.getOwnPropertyNames(sourceObj); - i = props.length; - while (i-- > 0) { - prop = props[i]; - if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { - destObj[prop] = sourceObj[prop]; - merged[prop] = true; - } - } - sourceObj = filter !== false && getPrototypeOf(sourceObj); - } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); - - return destObj; -} - -/** - * Determines whether a string ends with the characters of a specified string - * - * @param {String} str - * @param {String} searchString - * @param {Number} [position= 0] - * - * @returns {boolean} - */ -const endsWith = (str, searchString, position) => { - str = String(str); - if (position === undefined || position > str.length) { - position = str.length; - } - position -= searchString.length; - const lastIndex = str.indexOf(searchString, position); - return lastIndex !== -1 && lastIndex === position; -} - - -/** - * Returns new array from array like object or null if failed - * - * @param {*} [thing] - * - * @returns {?Array} - */ -const toArray = (thing) => { - if (!thing) return null; - if (isArray(thing)) return thing; - let i = thing.length; - if (!isNumber(i)) return null; - const arr = new Array(i); - while (i-- > 0) { - arr[i] = thing[i]; - } - return arr; -} - -/** - * Checking if the Uint8Array exists and if it does, it returns a function that checks if the - * thing passed in is an instance of Uint8Array - * - * @param {TypedArray} - * - * @returns {Array} - */ -// eslint-disable-next-line func-names -const isTypedArray = (TypedArray => { - // eslint-disable-next-line func-names - return thing => { - return TypedArray && thing instanceof TypedArray; - }; -})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array)); - -/** - * For each entry in the object, call the function with the key and value. - * - * @param {Object} obj - The object to iterate over. - * @param {Function} fn - The function to call for each entry. - * - * @returns {void} - */ -const forEachEntry = (obj, fn) => { - const generator = obj && obj[Symbol.iterator]; - - const iterator = generator.call(obj); - - let result; - - while ((result = iterator.next()) && !result.done) { - const pair = result.value; - fn.call(obj, pair[0], pair[1]); - } -} - -/** - * It takes a regular expression and a string, and returns an array of all the matches - * - * @param {string} regExp - The regular expression to match against. - * @param {string} str - The string to search. - * - * @returns {Array} - */ -const matchAll = (regExp, str) => { - let matches; - const arr = []; - - while ((matches = regExp.exec(str)) !== null) { - arr.push(matches); - } - - return arr; -} - -/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ -const isHTMLForm = kindOfTest('HTMLFormElement'); - -const toCamelCase = str => { - return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g, - function replacer(m, p1, p2) { - return p1.toUpperCase() + p2; - } - ); -}; - -/* Creating a function that will check if an object has a property. */ -const hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype); - -/** - * Determine if a value is a RegExp object - * - * @param {*} val The value to test - * - * @returns {boolean} True if value is a RegExp object, otherwise false - */ -const isRegExp = kindOfTest('RegExp'); - -const reduceDescriptors = (obj, reducer) => { - const descriptors = Object.getOwnPropertyDescriptors(obj); - const reducedDescriptors = {}; - - forEach(descriptors, (descriptor, name) => { - let ret; - if ((ret = reducer(descriptor, name, obj)) !== false) { - reducedDescriptors[name] = ret || descriptor; - } - }); - - Object.defineProperties(obj, reducedDescriptors); -} - -/** - * Makes all methods read-only - * @param {Object} obj - */ - -const freezeMethods = (obj) => { - reduceDescriptors(obj, (descriptor, name) => { - // skip restricted props in strict mode - if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) { - return false; - } - - const value = obj[name]; - - if (!isFunction(value)) return; - - descriptor.enumerable = false; - - if ('writable' in descriptor) { - descriptor.writable = false; - return; - } - - if (!descriptor.set) { - descriptor.set = () => { - throw Error('Can not rewrite read-only method \'' + name + '\''); - }; - } - }); -} - -const toObjectSet = (arrayOrString, delimiter) => { - const obj = {}; - - const define = (arr) => { - arr.forEach(value => { - obj[value] = true; - }); - } - - isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter)); - - return obj; -} - -const noop = () => {} - -const toFiniteNumber = (value, defaultValue) => { - return value != null && Number.isFinite(value = +value) ? value : defaultValue; -} - -const ALPHA = 'abcdefghijklmnopqrstuvwxyz' - -const DIGIT = '0123456789'; - -const ALPHABET = { - DIGIT, - ALPHA, - ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT -} - -const generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => { - let str = ''; - const {length} = alphabet; - while (size--) { - str += alphabet[Math.random() * length|0] - } - - return str; -} - -/** - * If the thing is a FormData object, return true, otherwise return false. - * - * @param {unknown} thing - The thing to check. - * - * @returns {boolean} - */ -function isSpecCompliantForm(thing) { - return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]); -} - -const toJSONObject = (obj) => { - const stack = new Array(10); - - const visit = (source, i) => { - - if (isObject(source)) { - if (stack.indexOf(source) >= 0) { - return; - } - - if(!('toJSON' in source)) { - stack[i] = source; - const target = isArray(source) ? [] : {}; - - forEach(source, (value, key) => { - const reducedValue = visit(value, i + 1); - !isUndefined(reducedValue) && (target[key] = reducedValue); - }); - - stack[i] = undefined; - - return target; - } - } - - return source; - } - - return visit(obj, 0); -} - -const isAsyncFn = kindOfTest('AsyncFunction'); - -const isThenable = (thing) => - thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch); - -// original code -// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34 - -const _setImmediate = ((setImmediateSupported, postMessageSupported) => { - if (setImmediateSupported) { - return setImmediate; - } - - return postMessageSupported ? ((token, callbacks) => { - _global.addEventListener("message", ({source, data}) => { - if (source === _global && data === token) { - callbacks.length && callbacks.shift()(); - } - }, false); - - return (cb) => { - callbacks.push(cb); - _global.postMessage(token, "*"); - } - })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb); -})( - typeof setImmediate === 'function', - isFunction(_global.postMessage) -); - -const asap = typeof queueMicrotask !== 'undefined' ? - queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate); - -// ********************* - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - isArray, - isArrayBuffer, - isBuffer, - isFormData, - isArrayBufferView, - isString, - isNumber, - isBoolean, - isObject, - isPlainObject, - isReadableStream, - isRequest, - isResponse, - isHeaders, - isUndefined, - isDate, - isFile, - isBlob, - isRegExp, - isFunction, - isStream, - isURLSearchParams, - isTypedArray, - isFileList, - forEach, - merge, - extend, - trim, - stripBOM, - inherits, - toFlatObject, - kindOf, - kindOfTest, - endsWith, - toArray, - forEachEntry, - matchAll, - isHTMLForm, - hasOwnProperty, - hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection - reduceDescriptors, - freezeMethods, - toObjectSet, - toCamelCase, - noop, - toFiniteNumber, - findKey, - global: _global, - isContextDefined, - ALPHABET, - generateString, - isSpecCompliantForm, - toJSONObject, - isAsyncFn, - isThenable, - setImmediate: _setImmediate, - asap -}); - - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/compat get default export */ -/******/ (() => { -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = (module) => { -/******/ var getter = module && module.__esModule ? -/******/ () => (module['default']) : -/******/ () => (module); -/******/ __webpack_require__.d(getter, { a: getter }); -/******/ return getter; -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/define property getters */ -/******/ (() => { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = (exports, definition) => { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ (() => { -/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -/******/ })(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ (() => { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = (exports) => { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ })(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry needs to be wrapped in an IIFE because it needs to be in strict mode. -(() => { -"use strict"; -/*!**************************!*\ - !*** ./src/Typesense.ts ***! - \**************************/ -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ Client: () => (/* reexport safe */ _Typesense_Client__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ Errors: () => (/* reexport module object */ _Typesense_Errors__WEBPACK_IMPORTED_MODULE_2__), -/* harmony export */ SearchClient: () => (/* reexport safe */ _Typesense_SearchClient__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Typesense_Client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Typesense/Client */ "./src/Typesense/Client.ts"); -/* harmony import */ var _Typesense_SearchClient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Typesense/SearchClient */ "./src/Typesense/SearchClient.ts"); -/* harmony import */ var _Typesense_Errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Typesense/Errors */ "./src/Typesense/Errors/index.ts"); - - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - Client: _Typesense_Client__WEBPACK_IMPORTED_MODULE_0__["default"], - SearchClient: _Typesense_SearchClient__WEBPACK_IMPORTED_MODULE_1__["default"], - Errors: _Typesense_Errors__WEBPACK_IMPORTED_MODULE_2__ -}); -})(); - -Typesense = __webpack_exports__; -/******/ })() -; -//# sourceMappingURL=typesense.js.map \ No newline at end of file diff --git a/dist/typesense.js.map b/dist/typesense.js.map deleted file mode 100644 index 30627bc9..00000000 --- a/dist/typesense.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"typesense.js","mappings":"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AO,UAAU;AAAA;AAAA;AAAA;AAAA,kGAAC;AAC1B,MAAM,KAAK,EAIN;AACL,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,qEAAqE;AACrE,YAAY;AACZ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,qDAAqD;AACrD,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,sBAAsB;AACtB;;AAEA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;ACpWD;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA,cAAc,sGAAiC;AAC/C;AACA,gBAAgB;AAChB;AACA;AACA,GAAG,EAAE,yBAAyB,SAAS,yBAAyB;AAChE;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,KAAK;AACL,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,aAAa;AACb,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA,KAAK;AACL;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAA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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,2DAAM;AACZ;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,2DAAU,oBAAoB,2DAAU;;AAEzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,2DAAU,kBAAkB,2DAAU;;AAEvD;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD,iEAAoB;AACvE;AACA;AACA;AACA,iBAAiB,2DAAU;AAC3B;AACA,2CAA2C,2DAAU,aAAa,2DAAU;AAC5E;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM,iDAAK;AACX;AACA,OAAO;AACP;;AAEA;AACA,SAAS,iDAAK;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,sFAAoB;AAChE;AACA;;AAEA;AACA;AACA,wCAAwC,sFAAoB;;AAE5D;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gEAAa;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,qEAAa;;AAElC,oBAAoB,0DAAQ;AAC5B,iBAAiB,2DAAU,2CAA2C,2DAAU;AAChF;AACA;;;AAGA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpMY;;AAEkB;AACM;AACD;AACY;AACL;AACc;AACH;AACJ;AACN;AACN;AACW;AACH;AACL;AACY;AACH;AACJ;AACW;;AAEzD;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,OAAO;AACpB;AACA;AACA,sBAAsB,sDAAK;AAC3B,mBAAmB,4DAAI,CAAC,sDAAK;;AAE7B;AACA,EAAE,iDAAK,kBAAkB,sDAAK,sBAAsB,iBAAiB;;AAErE;AACA,EAAE,iDAAK,kCAAkC,iBAAiB;;AAE1D;AACA;AACA,0BAA0B,gEAAW;AACrC;;AAEA;AACA;;AAEA;AACA,6BAA6B,0DAAQ;;AAErC;AACA,cAAc,sDAAK;;AAEnB;AACA,sBAAsB,gEAAa;AACnC,oBAAoB,8DAAW;AAC/B,iBAAiB,2DAAQ;AACzB,gBAAgB,iDAAO;AACvB,mBAAmB,8DAAU;;AAE7B;AACA,mBAAmB,4DAAU;;AAE7B;AACA;;AAEA;AACA;AACA;AACA;;AAEA,eAAe,2DAAM;;AAErB;AACA,qBAAqB,iEAAY;;AAEjC;AACA,oBAAoB,4DAAW;;AAE/B,qBAAqB,8DAAY;;AAEjC,4BAA4B,uEAAc,CAAC,iDAAK;;AAEhD,mBAAmB,8DAAQ;;AAE3B,uBAAuB,mEAAc;;AAErC;;AAEA;AACA,iEAAe,KAAK;;;;;;;;;;;;;;;;;ACxFP;;AAEkC;;AAE/C;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,yDAAa;AACtC;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,WAAW,EAAC;;;;;;;;;;;;;;;;;;ACtId;;AAEkC;AACf;;AAEhC;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA,EAAE,2DAAU,oDAAoD,2DAAU;AAC1E;AACA;;AAEA,iDAAK,yBAAyB,2DAAU;AACxC;AACA,CAAC;;AAED,iEAAe,aAAa,EAAC;;;;;;;;;;;;;;;;ACxBhB;;AAEE;AACf;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACJa;;AAEqB;AACY;AACW;AACN;AACR;AACI;AACC;AACH;;AAE7C,mBAAmB,6DAAS;;AAE5B;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,mBAAmB,8DAAkB;AACrC,oBAAoB,8DAAkB;AACtC;AACA;;AAEA;AACA;AACA;AACA,aAAa,eAAe;AAC5B,aAAa,SAAS;AACtB;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,aAAa,2DAAW;;AAExB,WAAW,yCAAyC;;AAEpD;AACA,MAAM,6DAAS;AACf;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,UAAU,iDAAK;AACf;AACA;AACA;AACA,QAAQ;AACR,QAAQ,6DAAS;AACjB;AACA;AACA,SAAS;AACT;AACA;;AAEA,IAAI,6DAAS;AACb;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA,oCAAoC,iDAAK;AACzC;AACA;AACA;;AAEA,eAAe,iDAAK;AACpB;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,wDAAY;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,qBAAqB,2DAAe;AACpC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,2DAAe;AAC/B,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,aAAa,2DAAW;AACxB,qBAAqB,6DAAa;AAClC,WAAW,gEAAQ;AACnB;AACA;;AAEA;AACA,iDAAK;AACL;AACA;AACA,wBAAwB,2DAAW,aAAa;AAChD;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA,CAAC;;AAED,iDAAK;AACL;;AAEA;AACA;AACA,0BAA0B,2DAAW,aAAa;AAClD;AACA;AACA;AACA,UAAU,IAAI;AACd;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED,iEAAe,KAAK,EAAC;;;;;;;;;;;;;;;;;ACxOR;;AAEmB;;AAEhC;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iDAAK;AACnB;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,CAAC;;AAED;AACA,kDAAkD,YAAY;;AAE9D;AACA;AACA;;AAEA,EAAE,iDAAK;AACP;AACA,GAAG;AACH;AACA,GAAG;;AAEH;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,iEAAe,UAAU,EAAC;;;;;;;;;;;;;;;;;;ACtGb;;AAEmB;AACsB;;AAEtD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS,iDAAK;AACd;;AAEA;AACA;AACA,2BAA2B,mBAAmB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,MAAM,iDAAK;AACX;AACA;;AAEA;AACA;AACA;;AAEA,OAAO,iDAAK;;AAEZ,MAAM,iDAAK;AACX;AACA;;AAEA,MAAM,iDAAK;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,uBAAuB,iDAAK;;AAE5B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,iDAAK;;AAEvB;AACA;AACA;AACA;;AAEA;AACA,MAAM,iDAAK;;AAEX,QAAQ,iDAAK;AACb;AACA,MAAM,QAAQ,iDAAK;AACnB,iBAAiB,oEAAY;AAC7B,MAAM,SAAS,iDAAK;AACpB;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,iDAAK;;AAEvB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,YAAY,iDAAK;AACjB;AACA;;AAEA,YAAY,iDAAK;AACjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,iDAAK;;AAEvB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,iDAAK;;AAEzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA,QAAQ,iDAAK;AACb;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,IAAI,iDAAK;AACT,kBAAkB,iDAAK;;AAEvB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAI,iDAAK;AACT,sEAAsE,iDAAK;AAC3E,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,iDAAK;;AAET;AACA;AACA;;AAEA;;AAEA;AACA,iDAAK,6CAA6C,MAAM;AACxD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,iDAAK;;AAEL,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;;AC7Sf;;AAEqB;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,UAAU;AACvB,aAAa,UAAU;AACvB;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB;AACA,eAAe;AACf;AACA;AACA,IAAI,iDAAK;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,iEAAe,kBAAkB,EAAC;;;;;;;;;;;;;;;;;;ACtErB;;AAE2C;AACJ;;AAEpD;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACe;AACf,kBAAkB,qEAAa;AAC/B,WAAW,mEAAW;AACtB;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpBa;;AAEkC;AACF;AACD;AACW;AACJ;AACJ;;AAE/C;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,gEAAa;AAC3B;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,SAAS;AACtB;AACe;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A,QAAQ;AACR;AACA;AACA,kBAAkB,2DAAU,SAAS,2DAAU;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,0DAAQ;AACtB,UAAU,0DAAQ;AAClB,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAK;AACL;AACA,CAAC;;AAED,iEAAe,QAAQ,EAAC;;;;;;;;;;;;;;;;AChKX;;AAEb,iEAAe;AACf;AACA;AACA;AACA,CAAC,EAAC;;;;;;;;;;;;;;;;ACNK;;;;;;;;;;;;;;;;ACAM;;AAE4B;;AAEzC;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,WAAW,qBAAqB;AAChC;AACA,aAAa;AACb;AACA;AACA;;AAEA,YAAY,0DAAU;AACtB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,GAAG;AACH;;AAEA,iEAAe,oBAAoB,EAAC;;;;;;;;;;;;;;;;ACzDpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED,iEAAe,cAAc,EAAC;;;;;;;;;;;;;;;;ACtEjB;;AAEE;AACf;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACNa;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa;AACb;AACe;AACf;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC3BA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,iEAAe,QAAQ,EAAC;;;;;;;;;;;;;;;;;;;AC3CX;;AAEmB;AACe;AAC/C;AACoE;;AAEpE;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA,SAAS,iDAAK,yBAAyB,iDAAK;AAC5C;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,iDAAK;AACd;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA,aAAa;AACb;AACA;AACA,SAAS,iDAAK;AACd;;AAEA,mBAAmB,iDAAK,cAAc,iDAAK,IAAI;AAC/C;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,UAAU;AACrB;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,WAAW,qBAAqB;AAChC;AACA;AACA;AACA;AACA,OAAO,iDAAK;AACZ;AACA;;AAEA;AACA,8BAA8B,0EAAgB;;AAE9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ACA,mBAAmB;AACnB,YAAY;AACZ,QAAQ;AACR,GAAG;AACH;AACA,CAAC,EAAC;;;;;;;;;;;;;;;;;;;;ACZF;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAQC;;;;;;;;;;;;;;;;;;AClDsC;AACI;;AAE3C,iEAAe;AACf,KAAK,6CAAK;AACV,KAAK,sDAAQ;AACb,CAAC;;;;;;;;;;;;;;;;;ACNY;;AAEwB;;AAErC;;AAEA,OAAO,UAAU;AACjB,OAAO,gBAAgB;;AAEvB;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,SAAS;AACtB;AACA,OAAO,SAAS;;AAEhB;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;;AAGA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,UAAU;AACrB;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA,2BAA2B,oBAAoB,IAAI;AACnD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C,4BAA4B;AAC5B;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,UAAU;AACnB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,kCAAkC;AAClC,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA,gCAAgC,WAAW,IAAI;AAC/C;AACA;AACA,eAAe,4DAAI;AACnB,MAAM;AACN;AACA;AACA,GAAG,GAAG,WAAW;AACjB;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,kBAAkB;AAC7B,WAAW,UAAU;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,UAAU;AACrB;AACA,aAAa;AACb;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,eAAe;;AAEzC;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS,QAAQ;AACjB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,GAAG,WAAW,cAAc;AAC5B,CAAC;AACD;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,iEAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAC;;;;;;;UCvvBF;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;ACNwC;AACY;AACP;AAEL;AACxC,iEAAe;EAAEmQ,MAAM,EAANA,yDAAM;EAAE+M,YAAY,EAAZA,+DAAY;EAAEa,MAAM,EAANA,8CAAMA;AAAC,CAAC,E","sources":["webpack://Typesense/./src/Typesense/Alias.ts","webpack://Typesense/./src/Typesense/Aliases.ts","webpack://Typesense/./src/Typesense/Analytics.ts","webpack://Typesense/./src/Typesense/AnalyticsEvents.ts","webpack://Typesense/./src/Typesense/AnalyticsRule.ts","webpack://Typesense/./src/Typesense/AnalyticsRules.ts","webpack://Typesense/./src/Typesense/ApiCall.ts","webpack://Typesense/./src/Typesense/Client.ts","webpack://Typesense/./src/Typesense/Collection.ts","webpack://Typesense/./src/Typesense/Collections.ts","webpack://Typesense/./src/Typesense/Configuration.ts","webpack://Typesense/./src/Typesense/Conversation.ts","webpack://Typesense/./src/Typesense/ConversationModel.ts","webpack://Typesense/./src/Typesense/ConversationModels.ts","webpack://Typesense/./src/Typesense/Conversations.ts","webpack://Typesense/./src/Typesense/Debug.ts","webpack://Typesense/./src/Typesense/Document.ts","webpack://Typesense/./src/Typesense/Documents.ts","webpack://Typesense/./src/Typesense/Errors/HTTPError.ts","webpack://Typesense/./src/Typesense/Errors/ImportError.ts","webpack://Typesense/./src/Typesense/Errors/MissingConfigurationError.ts","webpack://Typesense/./src/Typesense/Errors/ObjectAlreadyExists.ts","webpack://Typesense/./src/Typesense/Errors/ObjectNotFound.ts","webpack://Typesense/./src/Typesense/Errors/ObjectUnprocessable.ts","webpack://Typesense/./src/Typesense/Errors/RequestMalformed.ts","webpack://Typesense/./src/Typesense/Errors/RequestUnauthorized.ts","webpack://Typesense/./src/Typesense/Errors/ServerError.ts","webpack://Typesense/./src/Typesense/Errors/TypesenseError.ts","webpack://Typesense/./src/Typesense/Errors/index.ts","webpack://Typesense/./src/Typesense/Health.ts","webpack://Typesense/./src/Typesense/Key.ts","webpack://Typesense/./src/Typesense/Keys.ts","webpack://Typesense/./src/Typesense/Metrics.ts","webpack://Typesense/./src/Typesense/MultiSearch.ts","webpack://Typesense/./src/Typesense/Operations.ts","webpack://Typesense/./src/Typesense/Override.ts","webpack://Typesense/./src/Typesense/Overrides.ts","webpack://Typesense/./src/Typesense/Preset.ts","webpack://Typesense/./src/Typesense/Presets.ts","webpack://Typesense/./src/Typesense/RequestWithCache.ts","webpack://Typesense/./src/Typesense/SearchClient.ts","webpack://Typesense/./src/Typesense/SearchOnlyCollection.ts","webpack://Typesense/./src/Typesense/SearchOnlyDocuments.ts","webpack://Typesense/./src/Typesense/Stats.ts","webpack://Typesense/./src/Typesense/Stopword.ts","webpack://Typesense/./src/Typesense/Stopwords.ts","webpack://Typesense/./src/Typesense/Synonym.ts","webpack://Typesense/./src/Typesense/Synonyms.ts","webpack://Typesense/./src/Typesense/Utils.ts","webpack://Typesense/./node_modules/loglevel/lib/loglevel.js","webpack://Typesense/ignored|/home/fanis/code/typesense/js-lib/src/Typesense|crypto","webpack://Typesense/ignored|/home/fanis/code/typesense/js-lib/src/Typesense|http","webpack://Typesense/ignored|/home/fanis/code/typesense/js-lib/src/Typesense|https","webpack://Typesense/./node_modules/@babel/runtime/helpers/regeneratorRuntime.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/typeof.js","webpack://Typesense/./node_modules/@babel/runtime/regenerator/index.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/construct.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/readOnlyError.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","webpack://Typesense/./node_modules/axios/lib/adapters/adapters.js","webpack://Typesense/./node_modules/axios/lib/adapters/fetch.js","webpack://Typesense/./node_modules/axios/lib/adapters/xhr.js","webpack://Typesense/./node_modules/axios/lib/axios.js","webpack://Typesense/./node_modules/axios/lib/cancel/CancelToken.js","webpack://Typesense/./node_modules/axios/lib/cancel/CanceledError.js","webpack://Typesense/./node_modules/axios/lib/cancel/isCancel.js","webpack://Typesense/./node_modules/axios/lib/core/Axios.js","webpack://Typesense/./node_modules/axios/lib/core/AxiosError.js","webpack://Typesense/./node_modules/axios/lib/core/AxiosHeaders.js","webpack://Typesense/./node_modules/axios/lib/core/InterceptorManager.js","webpack://Typesense/./node_modules/axios/lib/core/buildFullPath.js","webpack://Typesense/./node_modules/axios/lib/core/dispatchRequest.js","webpack://Typesense/./node_modules/axios/lib/core/mergeConfig.js","webpack://Typesense/./node_modules/axios/lib/core/settle.js","webpack://Typesense/./node_modules/axios/lib/core/transformData.js","webpack://Typesense/./node_modules/axios/lib/defaults/index.js","webpack://Typesense/./node_modules/axios/lib/defaults/transitional.js","webpack://Typesense/./node_modules/axios/lib/env/data.js","webpack://Typesense/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js","webpack://Typesense/./node_modules/axios/lib/helpers/HttpStatusCode.js","webpack://Typesense/./node_modules/axios/lib/helpers/bind.js","webpack://Typesense/./node_modules/axios/lib/helpers/buildURL.js","webpack://Typesense/./node_modules/axios/lib/helpers/combineURLs.js","webpack://Typesense/./node_modules/axios/lib/helpers/composeSignals.js","webpack://Typesense/./node_modules/axios/lib/helpers/cookies.js","webpack://Typesense/./node_modules/axios/lib/helpers/formDataToJSON.js","webpack://Typesense/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://Typesense/./node_modules/axios/lib/helpers/isAxiosError.js","webpack://Typesense/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://Typesense/./node_modules/axios/lib/helpers/null.js","webpack://Typesense/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://Typesense/./node_modules/axios/lib/helpers/parseProtocol.js","webpack://Typesense/./node_modules/axios/lib/helpers/progressEventReducer.js","webpack://Typesense/./node_modules/axios/lib/helpers/resolveConfig.js","webpack://Typesense/./node_modules/axios/lib/helpers/speedometer.js","webpack://Typesense/./node_modules/axios/lib/helpers/spread.js","webpack://Typesense/./node_modules/axios/lib/helpers/throttle.js","webpack://Typesense/./node_modules/axios/lib/helpers/toFormData.js","webpack://Typesense/./node_modules/axios/lib/helpers/toURLEncodedForm.js","webpack://Typesense/./node_modules/axios/lib/helpers/trackStream.js","webpack://Typesense/./node_modules/axios/lib/helpers/validator.js","webpack://Typesense/./node_modules/axios/lib/platform/browser/classes/Blob.js","webpack://Typesense/./node_modules/axios/lib/platform/browser/classes/FormData.js","webpack://Typesense/./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","webpack://Typesense/./node_modules/axios/lib/platform/browser/index.js","webpack://Typesense/./node_modules/axios/lib/platform/common/utils.js","webpack://Typesense/./node_modules/axios/lib/platform/index.js","webpack://Typesense/./node_modules/axios/lib/utils.js","webpack://Typesense/webpack/bootstrap","webpack://Typesense/webpack/runtime/compat get default export","webpack://Typesense/webpack/runtime/define property getters","webpack://Typesense/webpack/runtime/hasOwnProperty shorthand","webpack://Typesense/webpack/runtime/make namespace object","webpack://Typesense/./src/Typesense.ts"],"sourcesContent":["import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import * as logger from \"loglevel\";\nimport { Logger, LogLevelDesc } from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: LogLevelDesc;\n logger?: Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: Logger;\n readonly logLevel: LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n var _loggersByName = {};\n var defaultLogger = null;\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods() {\n /*jshint validthis:true */\n var level = this.getLevel();\n\n // Replace the actual methods.\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, this.name);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n\n // Return any important warnings.\n if (typeof console === undefinedType && level < this.levels.SILENT) {\n return \"No console available for logging\";\n }\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, _level, _loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, factory) {\n // Private instance variables.\n var self = this;\n /**\n * The level inherited from a parent logger (or a global default). We\n * cache this here rather than delegating to the parent so that it stays\n * in sync with the actual logging methods that we have installed (the\n * parent could change levels but we might not have rebuilt the loggers\n * in this child yet).\n * @type {number}\n */\n var inheritedLevel;\n /**\n * The default level for this logger, if any. If set, this overrides\n * `inheritedLevel`.\n * @type {number|null}\n */\n var defaultLevel;\n /**\n * A user-specific level for this logger. If set, this overrides\n * `defaultLevel`.\n * @type {number|null}\n */\n var userLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var cookieName = encodeURIComponent(storageKey);\n var location = cookie.indexOf(cookieName + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(\n cookie.slice(location + cookieName.length + 1)\n )[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage.removeItem(storageKey);\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {}\n }\n\n function normalizeLevel(input) {\n var level = input;\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n return level;\n } else {\n throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n }\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n if (userLevel != null) {\n return userLevel;\n } else if (defaultLevel != null) {\n return defaultLevel;\n } else {\n return inheritedLevel;\n }\n };\n\n self.setLevel = function (level, persist) {\n userLevel = normalizeLevel(level);\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(userLevel);\n }\n\n // NOTE: in v2, this should call rebuild(), which updates children.\n return replaceLoggingMethods.call(self);\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = normalizeLevel(level);\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n userLevel = null;\n clearPersistedLevel();\n replaceLoggingMethods.call(self);\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n self.rebuild = function () {\n if (defaultLogger !== self) {\n inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n }\n replaceLoggingMethods.call(self);\n\n if (defaultLogger === self) {\n for (var childName in _loggersByName) {\n _loggersByName[childName].rebuild();\n }\n }\n };\n\n // Initialize all the internal levels.\n inheritedLevel = normalizeLevel(\n defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n );\n var initialLevel = getPersistedLevel();\n if (initialLevel != null) {\n userLevel = normalizeLevel(initialLevel);\n }\n replaceLoggingMethods.call(self);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n defaultLogger = new Logger();\n\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name,\n defaultLogger.methodFactory\n );\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","/* (ignored) */","/* (ignored) */","/* (ignored) */","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return e;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var t,\n e = {},\n r = Object.prototype,\n n = r.hasOwnProperty,\n o = Object.defineProperty || function (t, e, r) {\n t[e] = r.value;\n },\n i = \"function\" == typeof Symbol ? Symbol : {},\n a = i.iterator || \"@@iterator\",\n c = i.asyncIterator || \"@@asyncIterator\",\n u = i.toStringTag || \"@@toStringTag\";\n function define(t, e, r) {\n return Object.defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), t[e];\n }\n try {\n define({}, \"\");\n } catch (t) {\n define = function define(t, e, r) {\n return t[e] = r;\n };\n }\n function wrap(t, e, r, n) {\n var i = e && e.prototype instanceof Generator ? e : Generator,\n a = Object.create(i.prototype),\n c = new Context(n || []);\n return o(a, \"_invoke\", {\n value: makeInvokeMethod(t, r, c)\n }), a;\n }\n function tryCatch(t, e, r) {\n try {\n return {\n type: \"normal\",\n arg: t.call(e, r)\n };\n } catch (t) {\n return {\n type: \"throw\",\n arg: t\n };\n }\n }\n e.wrap = wrap;\n var h = \"suspendedStart\",\n l = \"suspendedYield\",\n f = \"executing\",\n s = \"completed\",\n y = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var p = {};\n define(p, a, function () {\n return this;\n });\n var d = Object.getPrototypeOf,\n v = d && d(d(values([])));\n v && v !== r && n.call(v, a) && (p = v);\n var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);\n function defineIteratorMethods(t) {\n [\"next\", \"throw\", \"return\"].forEach(function (e) {\n define(t, e, function (t) {\n return this._invoke(e, t);\n });\n });\n }\n function AsyncIterator(t, e) {\n function invoke(r, o, i, a) {\n var c = tryCatch(t[r], t, o);\n if (\"throw\" !== c.type) {\n var u = c.arg,\n h = u.value;\n return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n invoke(\"next\", t, i, a);\n }, function (t) {\n invoke(\"throw\", t, i, a);\n }) : e.resolve(h).then(function (t) {\n u.value = t, i(u);\n }, function (t) {\n return invoke(\"throw\", t, i, a);\n });\n }\n a(c.arg);\n }\n var r;\n o(this, \"_invoke\", {\n value: function value(t, n) {\n function callInvokeWithMethodAndArg() {\n return new e(function (e, r) {\n invoke(t, n, e, r);\n });\n }\n return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(e, r, n) {\n var o = h;\n return function (i, a) {\n if (o === f) throw Error(\"Generator is already running\");\n if (o === s) {\n if (\"throw\" === i) throw a;\n return {\n value: t,\n done: !0\n };\n }\n for (n.method = i, n.arg = a;;) {\n var c = n.delegate;\n if (c) {\n var u = maybeInvokeDelegate(c, n);\n if (u) {\n if (u === y) continue;\n return u;\n }\n }\n if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n if (o === h) throw o = s, n.arg;\n n.dispatchException(n.arg);\n } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n o = f;\n var p = tryCatch(e, r, n);\n if (\"normal\" === p.type) {\n if (o = n.done ? s : l, p.arg === y) continue;\n return {\n value: p.arg,\n done: n.done\n };\n }\n \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n }\n };\n }\n function maybeInvokeDelegate(e, r) {\n var n = r.method,\n o = e.iterator[n];\n if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y;\n var i = tryCatch(o, e.iterator, r.arg);\n if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n var a = i.arg;\n return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y);\n }\n function pushTryEntry(t) {\n var e = {\n tryLoc: t[0]\n };\n 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);\n }\n function resetTryEntry(t) {\n var e = t.completion || {};\n e.type = \"normal\", delete e.arg, t.completion = e;\n }\n function Context(t) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], t.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(e) {\n if (e || \"\" === e) {\n var r = e[a];\n if (r) return r.call(e);\n if (\"function\" == typeof e.next) return e;\n if (!isNaN(e.length)) {\n var o = -1,\n i = function next() {\n for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n return next.value = t, next.done = !0, next;\n };\n return i.next = i;\n }\n }\n throw new TypeError(_typeof(e) + \" is not iterable\");\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), o(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n var e = \"function\" == typeof t && t.constructor;\n return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n }, e.mark = function (t) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t;\n }, e.awrap = function (t) {\n return {\n __await: t\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n return this;\n }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n void 0 === i && (i = Promise);\n var a = new AsyncIterator(wrap(t, r, n, o), i);\n return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n return t.done ? t.value : a.next();\n });\n }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n return this;\n }), define(g, \"toString\", function () {\n return \"[object Generator]\";\n }), e.keys = function (t) {\n var e = Object(t),\n r = [];\n for (var n in e) r.push(n);\n return r.reverse(), function next() {\n for (; r.length;) {\n var t = r.pop();\n if (t in e) return next.value = t, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, e.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(e) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);\n },\n stop: function stop() {\n this.done = !0;\n var t = this.tryEntries[0].completion;\n if (\"throw\" === t.type) throw t.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(e) {\n if (this.done) throw e;\n var r = this;\n function handle(n, o) {\n return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n }\n for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n var i = this.tryEntries[o],\n a = i.completion;\n if (\"root\" === i.tryLoc) return handle(\"end\");\n if (i.tryLoc <= this.prev) {\n var c = n.call(i, \"catchLoc\"),\n u = n.call(i, \"finallyLoc\");\n if (c && u) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n } else if (c) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n } else {\n if (!u) throw Error(\"try statement without catch or finally\");\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(t, e) {\n for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n var o = this.tryEntries[r];\n if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n var i = o;\n break;\n }\n }\n i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n var a = i ? i.completion : {};\n return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n },\n complete: function complete(t, e) {\n if (\"throw\" === t.type) throw t.arg;\n return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y;\n },\n finish: function finish(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n }\n },\n \"catch\": function _catch(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.tryLoc === t) {\n var n = r.completion;\n if (\"throw\" === n.type) {\n var o = n.arg;\n resetTryEntry(r);\n }\n return o;\n }\n }\n throw Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(e, r, n) {\n return this.delegate = {\n iterator: values(e),\n resultName: r,\n nextLoc: n\n }, \"next\" === this.method && (this.arg = t), y;\n }\n }, e;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nexport { _arrayLikeToArray as default };","function _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nexport { _arrayWithHoles as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nexport { _arrayWithoutHoles as default };","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nexport { _assertThisInitialized as default };","function asyncGeneratorStep(n, t, e, r, o, a, c) {\n try {\n var i = n[a](c),\n u = i.value;\n } catch (n) {\n return void e(n);\n }\n i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n return function () {\n var t = this,\n e = arguments;\n return new Promise(function (r, o) {\n var a = n.apply(t, e);\n function _next(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n }\n function _throw(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n }\n _next(void 0);\n });\n };\n}\nexport { _asyncToGenerator as default };","function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _construct(t, e, r) {\n if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);\n var o = [null];\n o.push.apply(o, e);\n var p = new (t.bind.apply(t, o))();\n return r && setPrototypeOf(p, r.prototype), p;\n}\nexport { _construct as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nexport { _createClass as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","function _getPrototypeOf(t) {\n return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","function _isNativeFunction(t) {\n try {\n return -1 !== Function.toString.call(t).indexOf(\"[native code]\");\n } catch (n) {\n return \"function\" == typeof t;\n }\n}\nexport { _isNativeFunction as default };","function _isNativeReflectConstruct() {\n try {\n var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n } catch (t) {}\n return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n return !!t;\n })();\n}\nexport { _isNativeReflectConstruct as default };","function _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nexport { _iterableToArray as default };","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nexport { _iterableToArrayLimit as default };","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableRest as default };","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableSpread as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","function _readOnlyError(r) {\n throw new TypeError('\"' + r + '\" is read-only');\n}\nexport { _readOnlyError as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _slicedToArray(r, e) {\n return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nexport { _slicedToArray as default };","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nfunction _toConsumableArray(r) {\n return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nexport { _toConsumableArray as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n }\n}\nexport { _unsupportedIterableToArray as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nfunction _wrapNativeSuper(t) {\n var r = \"function\" == typeof Map ? new Map() : void 0;\n return _wrapNativeSuper = function _wrapNativeSuper(t) {\n if (null === t || !isNativeFunction(t)) return t;\n if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\");\n if (void 0 !== r) {\n if (r.has(t)) return r.get(t);\n r.set(t, Wrapper);\n }\n function Wrapper() {\n return construct(t, arguments, getPrototypeOf(this).constructor);\n }\n return Wrapper.prototype = Object.create(t.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: !1,\n writable: !0,\n configurable: !0\n }\n }), setPrototypeOf(Wrapper, t);\n }, _wrapNativeSuper(t);\n}\nexport { _wrapNativeSuper as default };","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","export const VERSION = \"1.7.9\";","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Client from \"./Typesense/Client\";\nimport SearchClient from \"./Typesense/SearchClient\";\nimport * as Errors from \"./Typesense/Errors\";\n\nexport { Client, SearchClient, Errors };\nexport default { Client, SearchClient, Errors };\n"],"names":["Aliases","Alias","name","apiCall","_classCallCheck","_createClass","key","value","_retrieve","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","get","endpointPath","stop","retrieve","apply","arguments","_delete2","_callee2","_callee2$","_context2","delete","concat","RESOURCEPATH","encodeURIComponent","default","_upsert","mapping","put","upsert","_x","_x2","aliasName","AnalyticsRules","AnalyticsRule","AnalyticsEvents","Analytics","_defineProperty","_analyticsRules","_analyticsEvents","rules","id","undefined","individualAnalyticsRules","events","_create","params","post","create","operation","axios","Agent","HTTPAgent","HTTPSAgent","HTTPError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","process","versions","node","ApiCall","configuration","apiKey","nodes","JSON","parse","stringify","nearestNode","connectionTimeoutSeconds","healthcheckIntervalSeconds","numRetriesPerRequest","numRetries","retryIntervalSeconds","sendApiKeyAsQueryParam","additionalUserHeaders","additionalHeaders","logger","initializeMetadataForNodes","currentNodeIndex","_get","endpoint","queryParameters","_ref","_ref$abortSignal","abortSignal","_ref$responseType","responseType","_args","length","performRequest","_args2","_post","_callee3","bodyParameters","_args3","_callee3$","_context3","_x3","_put","_callee4","_args4","_callee4$","_context4","_x4","_patch","_callee5","_args5","_callee5$","_context5","patch","_x5","getAdapter","axiosAdapter","isCloudflareWorkers","navigator","userAgent","bind","globalThis","_performRequest","_callee6","requestType","_ref2","_this","_ref2$queryParameters","_ref2$bodyParameters","_ref2$additionalHeade","_ref2$abortSignal","_ref2$responseType","_ref2$skipConnectionT","skipConnectionTimeout","_ref2$enableKeepAlive","enableKeepAlive","requestNumber","lastException","wasAborted","_loop","_ret","numTries","_callee6$","_context7","validate","Date","now","debug","toUpperCase","abortListener","requestOptions","cancelToken","source","response","_response$data","_response$data2","_error$code","_error$response","_loop$","_context6","getNextNode","index","aborted","v","Promise","reject","Error","adapter","method","url","uriFor","headers","Object","assign","defaultHeaders","maxContentLength","Infinity","maxBodyLength","validateStatus","status","transformResponse","data","transformedData","startsWith","timeout","keys","httpAgent","warn","keepAlive","httpsAgent","paramsSerializer","_typeof","CancelToken","cancel","addEventListener","token","sent","setNodeHealthcheck","resolve","customErrorForResponse","message","t0","code","timer","removeEventListener","finish","delegateYield","_x6","_x7","_x8","isHealthy","nodeDueForHealthcheck","map","join","candidateNode","i","isDueForHealthcheck","lastAccessTimestamp","_this2","forEach","protocol","host","port","path","_timer","_callee7","seconds","_callee7$","_context8","setTimeout","_x9","messageFromServer","httpBody","errorMessage","trim","error","Configuration","Collections","Collection","Keys","Key","Debug","Metrics","Stats","Health","Operations","MultiSearch","Presets","Preset","Stopwords","Stopword","Conversations","Conversation","Client","options","_options$sendApiKeyAs","metrics","stats","health","operations","multiSearch","_collections","individualCollections","_aliases","individualAliases","_keys","individualKeys","_presets","individualPresets","_stopwords","individualStopwords","analytics","_conversations","individualConversations","collections","collectionName","aliases","presets","stopwords","conversations","Documents","Overrides","Override","Synonyms","Synonym","Document","_documents","_overrides","_synonyms","_update","schema","update","_exists","exists","documents","documentId","individualDocuments","overrides","overrideId","individualOverrides","synonyms","synonymId","individualSynonyms","MissingConfigurationError","setDefaultPathInNode","setDefaultPortInNode","_objectSpread","randomizeNodes","shuffleArray","timeoutSeconds","cacheSearchResultsForSeconds","useServerSideSearchCache","logLevel","setLevel","showDeprecationWarnings","validateNodes","isNodeMissingAnyParameters","some","every","hasOwnProperty","masterNode","readReplicaNodes","array","j","Math","floor","random","ConversationModels","ConversationModel","_conversationsModels","models","individualConversationModels","partialDocument","ImportError","SearchOnlyDocuments","arrayableParams","query_by","query_by_weights","facet_by","group_by","include_fields","exclude_fields","highlight_fields","highlight_full_fields","pinned_hits","hidden_hits","infix","override_tags","num_typos","prefix","sort_by","_callSuper","_inherits","document","action","query","_createMany","import","createMany","_import2","documentsInJSONLFormat","resultsInJSONLFormat","resultsInJSONFormat","failedItems","_args6","Array","isArray","RangeError","includes","split","r","filter","success","successCount","_importStream","readableStream","_args7","importStream","_export2","_callee8","_args8","_callee8$","export","_exportStream","_callee9","_args9","_callee9$","_context9","exportStream","_TypesenseError","importResults","payload","_Error","httpStatus","constructor","setPrototypeOf","prototype","_wrapNativeSuper","createHmac","normalizeArrayableParams","generateScopedSearchKey","searchKey","parameters","normalizedParams","paramsJSON","digest","Buffer","from","keyPrefix","substr","rawScopedKey","toString","RequestWithCache","useTextContentType","requestWithCache","clearCache","_perform","searchRequests","commonParams","_ref$cacheSearchResul","additionalQueryParams","queryParams","normalizedSearchRequests","normalizedQueryParams","searches","perform","cacheResponseForSeconds","operationName","presetId","_normalizedParams","search","defaultCacheResponseForSeconds","defaultMaxSize","Map","responseCache","responsePromiseCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","_cacheOptions$cacheRe","_cacheOptions$maxSize","maxSize","isCacheDisabled","requestFunctionArgumentsJSON","cacheEntry","isEntryValid","cachePromiseEntry","_isEntryValid","responsePromise","isCacheOverMaxSize","oldestEntry","isResponsePromiseCacheOverMaxSize","_oldestEntry","call","_toConsumableArray","requestTimestamp","set","size","SearchOnlyCollection","SearchClient","console","entries","_slicedToArray","_","collection","_search","searchParameters","stopwordId","hasNoArrayValues","isNonArrayValue","result","transformedValues","Errors"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/typesense.min.js b/dist/typesense.min.js deleted file mode 100644 index 62f40dc2..00000000 --- a/dist/typesense.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see typesense.min.js.LICENSE.txt */ -var Typesense;(()=>{var e={65:function(e,t,n){var r,o;!function(){"use strict";r=function(){var e=function(){},t="undefined",n=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),r=["trace","debug","info","warn","error"],o={},i=null;function a(e,t){var n=e[t];if("function"==typeof n.bind)return n.bind(e);try{return Function.prototype.bind.call(n,e)}catch(t){return function(){return Function.prototype.apply.apply(n,[e,arguments])}}}function s(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function c(){for(var n=this.getLevel(),o=0;o=0&&t<=p.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?h+=":"+e:"symbol"==typeof e&&(h=void 0),p.name=e,p.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},p.methodFactory=n||l,p.getLevel=function(){return null!=u?u:null!=s?s:a},p.setLevel=function(e,n){return u=d(e),!1!==n&&function(e){var n=(r[e]||"silent").toUpperCase();if(typeof window!==t&&h){try{return void(window.localStorage[h]=n)}catch(e){}try{window.document.cookie=encodeURIComponent(h)+"="+n+";"}catch(e){}}}(u),c.call(p)},p.setDefaultLevel=function(e){s=d(e),f()||p.setLevel(e,!1)},p.resetLevel=function(){u=null,function(){if(typeof window!==t&&h){try{window.localStorage.removeItem(h)}catch(e){}try{window.document.cookie=encodeURIComponent(h)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(e){}}}(),c.call(p)},p.enableAll=function(e){p.setLevel(p.levels.TRACE,e)},p.disableAll=function(e){p.setLevel(p.levels.SILENT,e)},p.rebuild=function(){if(i!==p&&(a=d(i.getLevel())),c.call(p),i===p)for(var e in o)o[e].rebuild()},a=d(i?i.getLevel():"WARN");var y=f();null!=y&&(u=d(y)),c.call(p)}(i=new p).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=o[e];return t||(t=o[e]=new p(e,i.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return i.noConflict=function(){return typeof window!==t&&window.log===i&&(window.log=h),i},i.getLoggers=function(){return o},i.default=i,i},void 0===(o=r.call(t,n,t,e))||(e.exports=o)}()},612:()=>{},939:()=>{},82:()=>{},633:(e,t,n)=>{var r=n(738).default;function o(){"use strict";e.exports=o=function(){return n},e.exports.__esModule=!0,e.exports.default=e.exports;var t,n={},i=Object.prototype,a=i.hasOwnProperty,s=Object.defineProperty||function(e,t,n){e[t]=n.value},c="function"==typeof Symbol?Symbol:{},u=c.iterator||"@@iterator",l=c.asyncIterator||"@@asyncIterator",p=c.toStringTag||"@@toStringTag";function h(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{h({},"")}catch(t){h=function(e,t,n){return e[t]=n}}function f(e,t,n,r){var o=t&&t.prototype instanceof b?t:b,i=Object.create(o.prototype),a=new _(r||[]);return s(i,"_invoke",{value:A(e,n,a)}),i}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}n.wrap=f;var y="suspendedStart",v="suspendedYield",m="executing",g="completed",w={};function b(){}function C(){}function R(){}var k={};h(k,u,(function(){return this}));var E=Object.getPrototypeOf,S=E&&E(E(U([])));S&&S!==i&&a.call(S,u)&&(k=S);var O=R.prototype=b.prototype=Object.create(k);function P(e){["next","throw","return"].forEach((function(t){h(e,t,(function(e){return this._invoke(t,e)}))}))}function x(e,t){function n(o,i,s,c){var u=d(e[o],e,i);if("throw"!==u.type){var l=u.arg,p=l.value;return p&&"object"==r(p)&&a.call(p,"__await")?t.resolve(p.__await).then((function(e){n("next",e,s,c)}),(function(e){n("throw",e,s,c)})):t.resolve(p).then((function(e){l.value=e,s(l)}),(function(e){return n("throw",e,s,c)}))}c(u.arg)}var o;s(this,"_invoke",{value:function(e,r){function i(){return new t((function(t,o){n(e,r,t,o)}))}return o=o?o.then(i,i):i()}})}function A(e,n,r){var o=y;return function(i,a){if(o===m)throw Error("Generator is already running");if(o===g){if("throw"===i)throw a;return{value:t,done:!0}}for(r.method=i,r.arg=a;;){var s=r.delegate;if(s){var c=T(s,r);if(c){if(c===w)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===y)throw o=g,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var u=d(e,n,r);if("normal"===u.type){if(o=r.done?g:v,u.arg===w)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(o=g,r.method="throw",r.arg=u.arg)}}}function T(e,n){var r=n.method,o=e.iterator[r];if(o===t)return n.delegate=null,"throw"===r&&e.iterator.return&&(n.method="return",n.arg=t,T(e,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),w;var i=d(o,e.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,w;var a=i.arg;return a?a.done?(n[e.resultName]=a.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,w):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,w)}function N(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function j(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(N,this),this.reset(!0)}function U(e){if(e||""===e){var n=e[u];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function n(){for(;++o=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var c=a.call(i,"catchLoc"),u=a.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&a.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),j(n),w}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;j(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:U(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),w}},n}e.exports=o,e.exports.__esModule=!0,e.exports.default=e.exports},738:e=>{function t(n){return e.exports=t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,t(n)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},756:(e,t,n)=>{var r=n(633)();e.exports=r;try{regeneratorRuntime=r}catch(e){"object"==typeof globalThis?globalThis.regeneratorRuntime=r:Function("r","regeneratorRuntime = r")(r)}}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{Client:()=>ar,Errors:()=>t,SearchClient:()=>cr,default:()=>ur});var e={};n.r(e),n.d(e,{hasBrowserEnv:()=>Ie,hasStandardBrowserEnv:()=>qe,hasStandardBrowserWebWorkerEnv:()=>De,navigator:()=>Fe,origin:()=>Be});var t={};function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function a(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}function s(e,t){for(var n=0;non,ImportError:()=>hn,MissingConfigurationError:()=>b,ObjectAlreadyExists:()=>Yt,ObjectNotFound:()=>$t,ObjectUnprocessable:()=>en,RequestMalformed:()=>Wt,RequestUnauthorized:()=>Vt,ServerError:()=>nn,TypesenseError:()=>g});var l=n(65);function p(e,t){if(t&&("object"==i(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}function f(e,t){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},f(e,t)}function d(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&f(e,t)}function y(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(y=function(){return!!e})()}function v(e){var t="function"==typeof Map?new Map:void 0;return v=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf("[native code]")}catch(t){return"function"==typeof e}}(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return function(e,t,n){if(y())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,t);var o=new(e.bind.apply(e,r));return n&&f(o,n.prototype),o}(e,arguments,h(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),f(n,e)},v(e)}function m(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(m=function(){return!!e})()}var g=function(e){function t(e,n,r){var i,a,s,c;return o(this,t),a=this,c=[e],s=h(s=t),(i=p(a,m()?Reflect.construct(s,c||[],h(a).constructor):s.apply(a,c))).name=(this instanceof t?this.constructor:void 0).name,i.httpBody=n,i.httpStatus=r,Object.setPrototypeOf(i,(this instanceof t?this.constructor:void 0).prototype),i}return d(t,e),c(t)}(v(Error));function w(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(w=function(){return!!e})()}var b=function(e){function t(){return o(this,t),e=this,r=arguments,n=h(n=t),p(e,w()?Reflect.construct(n,r||[],h(e).constructor):n.apply(e,r));var e,n,r}return d(t,e),c(t)}(g);function C(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var R=function(){return c((function e(t){var n=this;o(this,e),this.nodes=t.nodes||[],this.nodes=this.nodes.map((function(e){return n.setDefaultPathInNode(e)})).map((function(e){return n.setDefaultPortInNode(e)})).map((function(e){return function(e){for(var t=1;t=0?t.numRetries:this.nodes.length+(null==this.nearestNode?0:1))||3,this.retryIntervalSeconds=t.retryIntervalSeconds||.1,this.apiKey=t.apiKey,this.sendApiKeyAsQueryParam=t.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=t.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=t.useServerSideSearchCache||!1,this.axiosAdapter=t.axiosAdapter,this.logger=t.logger||l,this.logLevel=t.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=t.additionalHeaders,this.httpAgent=t.httpAgent,this.httpsAgent=t.httpsAgent,this.paramsSerializer=t.paramsSerializer,this.showDeprecationWarnings(t),this.validate()}),[{key:"validate",value:function(){if(null==this.nodes||0===this.nodes.length||this.validateNodes())throw new b("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(null!=this.nearestNode&&this.isNodeMissingAnyParameters(this.nearestNode))throw new b("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(null==this.apiKey)throw new b("Ensure that apiKey is set");return!0}},{key:"validateNodes",value:function(){var e=this;return this.nodes.some((function(t){return e.isNodeMissingAnyParameters(t)}))}},{key:"isNodeMissingAnyParameters",value:function(e){return!["protocol","host","port","path"].every((function(t){return e.hasOwnProperty(t)}))&&null==e.url}},{key:"setDefaultPathInNode",value:function(e){return null==e||e.hasOwnProperty("path")||(e.path=""),e}},{key:"setDefaultPortInNode",value:function(e){if(null!=e&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80}return e}},{key:"showDeprecationWarnings",value:function(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}},{key:"shuffleArray",value:function(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),r=[e[n],e[t]];e[t]=r[0],e[n]=r[1]}}}])}();function k(e,t,n,r,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,o)}function E(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){k(i,r,o,a,s,"next",e)}function s(e){k(i,r,o,a,s,"throw",e)}a(void 0)}))}}var S=n(756),O=n.n(S);function P(e,t){return function(){return e.apply(t,arguments)}}const{toString:x}=Object.prototype,{getPrototypeOf:A}=Object,T=(N=Object.create(null),e=>{const t=x.call(e);return N[t]||(N[t]=t.slice(8,-1).toLowerCase())});var N;const j=e=>(e=e.toLowerCase(),t=>T(t)===e),_=e=>t=>typeof t===e,{isArray:U}=Array,L=_("undefined"),I=j("ArrayBuffer"),F=_("string"),q=_("function"),D=_("number"),B=e=>null!==e&&"object"==typeof e,H=e=>{if("object"!==T(e))return!1;const t=A(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},M=j("Date"),K=j("File"),z=j("Blob"),J=j("FileList"),W=j("URLSearchParams"),[G,V,Q,$]=["ReadableStream","Request","Response","Headers"].map(j);function X(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),U(e))for(r=0,o=e.length;r0;)if(r=n[o],t===r.toLowerCase())return r;return null}const Z="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,ee=e=>!L(e)&&e!==Z,te=(ne="undefined"!=typeof Uint8Array&&A(Uint8Array),e=>ne&&e instanceof ne);var ne;const re=j("HTMLFormElement"),oe=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),ie=j("RegExp"),ae=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};X(n,((n,o)=>{let i;!1!==(i=t(n,o,e))&&(r[o]=i||n)})),Object.defineProperties(e,r)},se="abcdefghijklmnopqrstuvwxyz",ce="0123456789",ue={DIGIT:ce,ALPHA:se,ALPHA_DIGIT:se+se.toUpperCase()+ce},le=j("AsyncFunction"),pe=(he="function"==typeof setImmediate,fe=q(Z.postMessage),he?setImmediate:fe?(de=`axios@${Math.random()}`,ye=[],Z.addEventListener("message",(({source:e,data:t})=>{e===Z&&t===de&&ye.length&&ye.shift()()}),!1),e=>{ye.push(e),Z.postMessage(de,"*")}):e=>setTimeout(e));var he,fe,de,ye;const ve="undefined"!=typeof queueMicrotask?queueMicrotask.bind(Z):"undefined"!=typeof process&&process.nextTick||pe,me={isArray:U,isArrayBuffer:I,isBuffer:function(e){return null!==e&&!L(e)&&null!==e.constructor&&!L(e.constructor)&&q(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||q(e.append)&&("formdata"===(t=T(e))||"object"===t&&q(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&I(e.buffer),t},isString:F,isNumber:D,isBoolean:e=>!0===e||!1===e,isObject:B,isPlainObject:H,isReadableStream:G,isRequest:V,isResponse:Q,isHeaders:$,isUndefined:L,isDate:M,isFile:K,isBlob:z,isRegExp:ie,isFunction:q,isStream:e=>B(e)&&q(e.pipe),isURLSearchParams:W,isTypedArray:te,isFileList:J,forEach:X,merge:function e(){const{caseless:t}=ee(this)&&this||{},n={},r=(r,o)=>{const i=t&&Y(n,o)||o;H(n[i])&&H(r)?n[i]=e(n[i],r):H(r)?n[i]=e({},r):U(r)?n[i]=r.slice():n[i]=r};for(let e=0,t=arguments.length;e(X(t,((t,r)=>{n&&q(t)?e[r]=P(t,n):e[r]=t}),{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,i,a;const s={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)a=o[i],r&&!r(a,e,t)||s[a]||(t[a]=e[a],s[a]=!0);e=!1!==n&&A(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:T,kindOfTest:j,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(U(e))return e;let t=e.length;if(!D(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:re,hasOwnProperty:oe,hasOwnProp:oe,reduceDescriptors:ae,freezeMethods:e=>{ae(e,((t,n)=>{if(q(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];q(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return U(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:Y,global:Z,isContextDefined:ee,ALPHABET:ue,generateString:(e=16,t=ue.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&q(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(B(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const o=U(e)?[]:{};return X(e,((e,t)=>{const i=n(e,r+1);!L(i)&&(o[t]=i)})),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:le,isThenable:e=>e&&(B(e)||q(e))&&q(e.then)&&q(e.catch),setImmediate:pe,asap:ve};function ge(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}me.inherits(ge,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:me.toJSONObject(this.config),code:this.code,status:this.status}}});const we=ge.prototype,be={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{be[e]={value:e}})),Object.defineProperties(ge,be),Object.defineProperty(we,"isAxiosError",{value:!0}),ge.from=(e,t,n,r,o,i)=>{const a=Object.create(we);return me.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),ge.call(a,e.message,t,n,r,o),a.cause=e,a.name=e.name,i&&Object.assign(a,i),a};const Ce=ge;function Re(e){return me.isPlainObject(e)||me.isArray(e)}function ke(e){return me.endsWith(e,"[]")?e.slice(0,-2):e}function Ee(e,t,n){return e?e.concat(t).map((function(e,t){return e=ke(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const Se=me.toFlatObject(me,{},null,(function(e){return/^is[A-Z]/.test(e)})),Oe=function(e,t,n){if(!me.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=me.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!me.isUndefined(t[e])}))).metaTokens,o=n.visitor||u,i=n.dots,a=n.indexes,s=(n.Blob||"undefined"!=typeof Blob&&Blob)&&me.isSpecCompliantForm(t);if(!me.isFunction(o))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(me.isDate(e))return e.toISOString();if(!s&&me.isBlob(e))throw new Ce("Blob is not supported. Use a Buffer instead.");return me.isArrayBuffer(e)||me.isTypedArray(e)?s&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function u(e,n,o){let s=e;if(e&&!o&&"object"==typeof e)if(me.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(me.isArray(e)&&function(e){return me.isArray(e)&&!e.some(Re)}(e)||(me.isFileList(e)||me.endsWith(n,"[]"))&&(s=me.toArray(e)))return n=ke(n),s.forEach((function(e,r){!me.isUndefined(e)&&null!==e&&t.append(!0===a?Ee([n],r,i):null===a?n:n+"[]",c(e))})),!1;return!!Re(e)||(t.append(Ee(o,n,i),c(e)),!1)}const l=[],p=Object.assign(Se,{defaultVisitor:u,convertValue:c,isVisitable:Re});if(!me.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!me.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+r.join("."));l.push(n),me.forEach(n,(function(n,i){!0===(!(me.isUndefined(n)||null===n)&&o.call(t,n,me.isString(i)?i.trim():i,r,p))&&e(n,r?r.concat(i):[i])})),l.pop()}}(e),t};function Pe(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function xe(e,t){this._pairs=[],e&&Oe(e,this,t)}const Ae=xe.prototype;Ae.append=function(e,t){this._pairs.push([e,t])},Ae.toString=function(e){const t=e?function(t){return e.call(this,t,Pe)}:Pe;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};const Te=xe;function Ne(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function je(e,t,n){if(!t)return e;const r=n&&n.encode||Ne;me.isFunction(n)&&(n={serialize:n});const o=n&&n.serialize;let i;if(i=o?o(t,n):me.isURLSearchParams(t)?t.toString():new Te(t,n).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}const _e=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){me.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Ue={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Le={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Te,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},Ie="undefined"!=typeof window&&"undefined"!=typeof document,Fe="object"==typeof navigator&&navigator||void 0,qe=Ie&&(!Fe||["ReactNative","NativeScript","NS"].indexOf(Fe.product)<0),De="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,Be=Ie&&window.location.href||"http://localhost",He={...e,...Le},Me=function(e){function t(e,n,r,o){let i=e[o++];if("__proto__"===i)return!0;const a=Number.isFinite(+i),s=o>=e.length;return i=!i&&me.isArray(r)?r.length:i,s?(me.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!a):(r[i]&&me.isObject(r[i])||(r[i]=[]),t(e,n,r[i],o)&&me.isArray(r[i])&&(r[i]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let i;for(r=0;r{t(function(e){return me.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null},Ke={transitional:Ue,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=me.isObject(e);if(o&&me.isHTMLForm(e)&&(e=new FormData(e)),me.isFormData(e))return r?JSON.stringify(Me(e)):e;if(me.isArrayBuffer(e)||me.isBuffer(e)||me.isStream(e)||me.isFile(e)||me.isBlob(e)||me.isReadableStream(e))return e;if(me.isArrayBufferView(e))return e.buffer;if(me.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Oe(e,new He.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return He.isNode&&me.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((i=me.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return Oe(i?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e){if(me.isString(e))try{return(0,JSON.parse)(e),me.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||Ke.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(me.isResponse(e)||me.isReadableStream(e))return e;if(e&&me.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw Ce.from(e,Ce.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:He.classes.FormData,Blob:He.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};me.forEach(["delete","get","head","post","put","patch"],(e=>{Ke.headers[e]={}}));const ze=Ke,Je=me.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),We=Symbol("internals");function Ge(e){return e&&String(e).trim().toLowerCase()}function Ve(e){return!1===e||null==e?e:me.isArray(e)?e.map(Ve):String(e)}function Qe(e,t,n,r,o){return me.isFunction(r)?r.call(this,t,n):(o&&(t=n),me.isString(t)?me.isString(r)?-1!==t.indexOf(r):me.isRegExp(r)?r.test(t):void 0:void 0)}class $e{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=Ge(t);if(!o)throw new Error("header name must be a non-empty string");const i=me.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=Ve(e))}const i=(e,t)=>me.forEach(e,((e,n)=>o(e,n,t)));if(me.isPlainObject(e)||e instanceof this.constructor)i(e,t);else if(me.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))i((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&Je[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t);else if(me.isHeaders(e))for(const[t,r]of e.entries())o(r,t,n);else null!=e&&o(t,e,n);return this}get(e,t){if(e=Ge(e)){const n=me.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(me.isFunction(t))return t.call(this,e,n);if(me.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Ge(e)){const n=me.findKey(this,e);return!(!n||void 0===this[n]||t&&!Qe(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=Ge(e)){const o=me.findKey(n,e);!o||t&&!Qe(0,n[o],o,t)||(delete n[o],r=!0)}}return me.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!Qe(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return me.forEach(this,((r,o)=>{const i=me.findKey(n,o);if(i)return t[i]=Ve(r),void delete t[o];const a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();a!==o&&delete t[o],t[a]=Ve(r),n[a]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return me.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&me.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[We]=this[We]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=Ge(e);t[r]||(function(e,t){const n=me.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return me.isArray(e)?e.forEach(r):r(e),this}}$e.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),me.reduceDescriptors($e.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),me.freezeMethods($e);const Xe=$e;function Ye(e,t){const n=this||ze,r=t||n,o=Xe.from(r.headers);let i=r.data;return me.forEach(e,(function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)})),o.normalize(),i}function Ze(e){return!(!e||!e.__CANCEL__)}function et(e,t,n){Ce.call(this,null==e?"canceled":e,Ce.ERR_CANCELED,t,n),this.name="CanceledError"}me.inherits(et,Ce,{__CANCEL__:!0});const tt=et;function nt(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new Ce("Request failed with status code "+n.status,[Ce.ERR_BAD_REQUEST,Ce.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}const rt=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,i=0,a=0;return t=void 0!==t?t:1e3,function(s){const c=Date.now(),u=r[a];o||(o=c),n[i]=s,r[i]=c;let l=a,p=0;for(;l!==i;)p+=n[l++],l%=e;if(i=(i+1)%e,i===a&&(a=(a+1)%e),c-o{o=i,n=null,r&&(clearTimeout(r),r=null),e.apply(null,t)};return[(...e)=>{const t=Date.now(),s=t-o;s>=i?a(e,t):(n=e,r||(r=setTimeout((()=>{r=null,a(n)}),i-s)))},()=>n&&a(n)]}((n=>{const i=n.loaded,a=n.lengthComputable?n.total:void 0,s=i-r,c=o(s);r=i,e({loaded:i,total:a,progress:a?i/a:void 0,bytes:s,rate:c||void 0,estimated:c&&a&&i<=a?(a-i)/c:void 0,event:n,lengthComputable:null!=a,[t?"download":"upload"]:!0})}),n)},ot=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},it=e=>(...t)=>me.asap((()=>e(...t))),at=He.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,He.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(He.origin),He.navigator&&/(msie|trident)/i.test(He.navigator.userAgent)):()=>!0,st=He.hasStandardBrowserEnv?{write(e,t,n,r,o,i){const a=[e+"="+encodeURIComponent(t)];me.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),me.isString(r)&&a.push("path="+r),me.isString(o)&&a.push("domain="+o),!0===i&&a.push("secure"),document.cookie=a.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function ct(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const ut=e=>e instanceof Xe?{...e}:e;function lt(e,t){t=t||{};const n={};function r(e,t,n,r){return me.isPlainObject(e)&&me.isPlainObject(t)?me.merge.call({caseless:r},e,t):me.isPlainObject(t)?me.merge({},t):me.isArray(t)?t.slice():t}function o(e,t,n,o){return me.isUndefined(t)?me.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function i(e,t){if(!me.isUndefined(t))return r(void 0,t)}function a(e,t){return me.isUndefined(t)?me.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,i){return i in t?r(n,o):i in e?r(void 0,n):void 0}const c={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:s,headers:(e,t,n)=>o(ut(e),ut(t),0,!0)};return me.forEach(Object.keys(Object.assign({},e,t)),(function(r){const i=c[r]||o,a=i(e[r],t[r],r);me.isUndefined(a)&&i!==s||(n[r]=a)})),n}const pt=e=>{const t=lt({},e);let n,{data:r,withXSRFToken:o,xsrfHeaderName:i,xsrfCookieName:a,headers:s,auth:c}=t;if(t.headers=s=Xe.from(s),t.url=je(ct(t.baseURL,t.url),e.params,e.paramsSerializer),c&&s.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):""))),me.isFormData(r))if(He.hasStandardBrowserEnv||He.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if(!1!==(n=s.getContentType())){const[e,...t]=n?n.split(";").map((e=>e.trim())).filter(Boolean):[];s.setContentType([e||"multipart/form-data",...t].join("; "))}if(He.hasStandardBrowserEnv&&(o&&me.isFunction(o)&&(o=o(t)),o||!1!==o&&at(t.url))){const e=i&&a&&st.read(a);e&&s.set(i,e)}return t},ht="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){const r=pt(e);let o=r.data;const i=Xe.from(r.headers).normalize();let a,s,c,u,l,{responseType:p,onUploadProgress:h,onDownloadProgress:f}=r;function d(){u&&u(),l&&l(),r.cancelToken&&r.cancelToken.unsubscribe(a),r.signal&&r.signal.removeEventListener("abort",a)}let y=new XMLHttpRequest;function v(){if(!y)return;const r=Xe.from("getAllResponseHeaders"in y&&y.getAllResponseHeaders());nt((function(e){t(e),d()}),(function(e){n(e),d()}),{data:p&&"text"!==p&&"json"!==p?y.response:y.responseText,status:y.status,statusText:y.statusText,headers:r,config:e,request:y}),y=null}y.open(r.method.toUpperCase(),r.url,!0),y.timeout=r.timeout,"onloadend"in y?y.onloadend=v:y.onreadystatechange=function(){y&&4===y.readyState&&(0!==y.status||y.responseURL&&0===y.responseURL.indexOf("file:"))&&setTimeout(v)},y.onabort=function(){y&&(n(new Ce("Request aborted",Ce.ECONNABORTED,e,y)),y=null)},y.onerror=function(){n(new Ce("Network Error",Ce.ERR_NETWORK,e,y)),y=null},y.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||Ue;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new Ce(t,o.clarifyTimeoutError?Ce.ETIMEDOUT:Ce.ECONNABORTED,e,y)),y=null},void 0===o&&i.setContentType(null),"setRequestHeader"in y&&me.forEach(i.toJSON(),(function(e,t){y.setRequestHeader(t,e)})),me.isUndefined(r.withCredentials)||(y.withCredentials=!!r.withCredentials),p&&"json"!==p&&(y.responseType=r.responseType),f&&([c,l]=rt(f,!0),y.addEventListener("progress",c)),h&&y.upload&&([s,u]=rt(h),y.upload.addEventListener("progress",s),y.upload.addEventListener("loadend",u)),(r.cancelToken||r.signal)&&(a=t=>{y&&(n(!t||t.type?new tt(null,e,y):t),y.abort(),y=null)},r.cancelToken&&r.cancelToken.subscribe(a),r.signal&&(r.signal.aborted?a():r.signal.addEventListener("abort",a)));const m=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);m&&-1===He.protocols.indexOf(m)?n(new Ce("Unsupported protocol "+m+":",Ce.ERR_BAD_REQUEST,e)):y.send(o||null)}))},ft=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,r=new AbortController;const o=function(e){if(!n){n=!0,a();const t=e instanceof Error?e:this.reason;r.abort(t instanceof Ce?t:new tt(t instanceof Error?t.message:t))}};let i=t&&setTimeout((()=>{i=null,o(new Ce(`timeout ${t} of ms exceeded`,Ce.ETIMEDOUT))}),t);const a=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach((e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)})),e=null)};e.forEach((e=>e.addEventListener("abort",o)));const{signal:s}=r;return s.unsubscribe=()=>me.asap(a),s}},dt=function*(e,t){let n=e.byteLength;if(!t||n{const o=async function*(e,t){for await(const n of async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}}(e))yield*dt(n,t)}(e,t);let i,a=0,s=e=>{i||(i=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return s(),void e.close();let i=r.byteLength;if(n){let e=a+=i;n(e)}e.enqueue(new Uint8Array(r))}catch(e){throw s(e),e}},cancel:e=>(s(e),o.return())},{highWaterMark:2})},vt="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,mt=vt&&"function"==typeof ReadableStream,gt=vt&&("function"==typeof TextEncoder?(wt=new TextEncoder,e=>wt.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var wt;const bt=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},Ct=mt&&bt((()=>{let e=!1;const t=new Request(He.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),Rt=mt&&bt((()=>me.isReadableStream(new Response("").body))),kt={stream:Rt&&(e=>e.body)};var Et;vt&&(Et=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!kt[e]&&(kt[e]=me.isFunction(Et[e])?t=>t[e]():(t,n)=>{throw new Ce(`Response type '${e}' is not supported`,Ce.ERR_NOT_SUPPORT,n)})})));const St={http:null,xhr:ht,fetch:vt&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:i,timeout:a,onDownloadProgress:s,onUploadProgress:c,responseType:u,headers:l,withCredentials:p="same-origin",fetchOptions:h}=pt(e);u=u?(u+"").toLowerCase():"text";let f,d=ft([o,i&&i.toAbortSignal()],a);const y=d&&d.unsubscribe&&(()=>{d.unsubscribe()});let v;try{if(c&&Ct&&"get"!==n&&"head"!==n&&0!==(v=await(async(e,t)=>{const n=me.toFiniteNumber(e.getContentLength());return null==n?(async e=>{if(null==e)return 0;if(me.isBlob(e))return e.size;if(me.isSpecCompliantForm(e)){const t=new Request(He.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return me.isArrayBufferView(e)||me.isArrayBuffer(e)?e.byteLength:(me.isURLSearchParams(e)&&(e+=""),me.isString(e)?(await gt(e)).byteLength:void 0)})(t):n})(l,r))){let e,n=new Request(t,{method:"POST",body:r,duplex:"half"});if(me.isFormData(r)&&(e=n.headers.get("content-type"))&&l.setContentType(e),n.body){const[e,t]=ot(v,rt(it(c)));r=yt(n.body,65536,e,t)}}me.isString(p)||(p=p?"include":"omit");const o="credentials"in Request.prototype;f=new Request(t,{...h,signal:d,method:n.toUpperCase(),headers:l.normalize().toJSON(),body:r,duplex:"half",credentials:o?p:void 0});let i=await fetch(f);const a=Rt&&("stream"===u||"response"===u);if(Rt&&(s||a&&y)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=i[t]}));const t=me.toFiniteNumber(i.headers.get("content-length")),[n,r]=s&&ot(t,rt(it(s),!0))||[];i=new Response(yt(i.body,65536,n,(()=>{r&&r(),y&&y()})),e)}u=u||"text";let m=await kt[me.findKey(kt,u)||"text"](i,e);return!a&&y&&y(),await new Promise(((t,n)=>{nt(t,n,{data:m,headers:Xe.from(i.headers),status:i.status,statusText:i.statusText,config:e,request:f})}))}catch(t){if(y&&y(),t&&"TypeError"===t.name&&/fetch/i.test(t.message))throw Object.assign(new Ce("Network Error",Ce.ERR_NETWORK,e,f),{cause:t.cause||t});throw Ce.from(t,t&&t.code,e,f)}})};me.forEach(St,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Ot=e=>`- ${e}`,Pt=e=>me.isFunction(e)||null===e||!1===e,xt=e=>{e=me.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let i=0;i`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));let n=t?e.length>1?"since :\n"+e.map(Ot).join("\n"):" "+Ot(e[0]):"as no adapter specified";throw new Ce("There is no suitable adapter to dispatch the request "+n,"ERR_NOT_SUPPORT")}return r};function At(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new tt(null,e)}function Tt(e){return At(e),e.headers=Xe.from(e.headers),e.data=Ye.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),xt(e.adapter||ze.adapter)(e).then((function(t){return At(e),t.data=Ye.call(e,e.transformResponse,t),t.headers=Xe.from(t.headers),t}),(function(t){return Ze(t)||(At(e),t&&t.response&&(t.response.data=Ye.call(e,e.transformResponse,t.response),t.response.headers=Xe.from(t.response.headers))),Promise.reject(t)}))}const Nt={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Nt[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const jt={};Nt.transitional=function(e,t,n){function r(e,t){return"[Axios v1.7.9] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,i)=>{if(!1===e)throw new Ce(r(o," has been removed"+(t?" in "+t:"")),Ce.ERR_DEPRECATED);return t&&!jt[o]&&(jt[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,i)}},Nt.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};const _t={assertOptions:function(e,t,n){if("object"!=typeof e)throw new Ce("options must be an object",Ce.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],a=t[i];if(a){const t=e[i],n=void 0===t||a(t,i,e);if(!0!==n)throw new Ce("option "+i+" must be "+n,Ce.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new Ce("Unknown option "+i,Ce.ERR_BAD_OPTION)}},validators:Nt},Ut=_t.validators;class Lt{constructor(e){this.defaults=e,this.interceptors={request:new _e,response:new _e}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+n):e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=lt(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&_t.assertOptions(n,{silentJSONParsing:Ut.transitional(Ut.boolean),forcedJSONParsing:Ut.transitional(Ut.boolean),clarifyTimeoutError:Ut.transitional(Ut.boolean)},!1),null!=r&&(me.isFunction(r)?t.paramsSerializer={serialize:r}:_t.assertOptions(r,{encode:Ut.function,serialize:Ut.function},!0)),_t.assertOptions(t,{baseUrl:Ut.spelling("baseURL"),withXsrfToken:Ut.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let i=o&&me.merge(o.common,o[t.method]);o&&me.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=Xe.concat(i,o);const a=[];let s=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,a.unshift(e.fulfilled,e.rejected))}));const c=[];let u;this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)}));let l,p=0;if(!s){const e=[Tt.bind(this),void 0];for(e.unshift.apply(e,a),e.push.apply(e,c),l=e.length,u=Promise.resolve(t);p{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new tt(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new Ft((function(t){e=t})),cancel:e}}}const qt=Ft,Dt={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Dt).forEach((([e,t])=>{Dt[t]=e}));const Bt=Dt,Ht=function e(t){const n=new It(t),r=P(It.prototype.request,n);return me.extend(r,It.prototype,n,{allOwnKeys:!0}),me.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(lt(t,n))},r}(ze);Ht.Axios=It,Ht.CanceledError=tt,Ht.CancelToken=qt,Ht.isCancel=Ze,Ht.VERSION="1.7.9",Ht.toFormData=Oe,Ht.AxiosError=Ce,Ht.Cancel=Ht.CanceledError,Ht.all=function(e){return Promise.all(e)},Ht.spread=function(e){return function(t){return e.apply(null,t)}},Ht.isAxiosError=function(e){return me.isObject(e)&&!0===e.isAxiosError},Ht.mergeConfig=lt,Ht.AxiosHeaders=Xe,Ht.formToJSON=e=>Me(me.isHTMLForm(e)?new FormData(e):e),Ht.getAdapter=xt,Ht.HttpStatusCode=Bt,Ht.default=Ht;const Mt=Ht;var Kt=n(939),zt=n(82);function Jt(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Jt=function(){return!!e})()}var Wt=function(e){function t(){return o(this,t),e=this,r=arguments,n=h(n=t),p(e,Jt()?Reflect.construct(n,r||[],h(e).constructor):n.apply(e,r));var e,n,r}return d(t,e),c(t)}(g);function Gt(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Gt=function(){return!!e})()}var Vt=function(e){function t(){return o(this,t),e=this,r=arguments,n=h(n=t),p(e,Gt()?Reflect.construct(n,r||[],h(e).constructor):n.apply(e,r));var e,n,r}return d(t,e),c(t)}(g);function Qt(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Qt=function(){return!!e})()}var $t=function(e){function t(){return o(this,t),e=this,r=arguments,n=h(n=t),p(e,Qt()?Reflect.construct(n,r||[],h(e).constructor):n.apply(e,r));var e,n,r}return d(t,e),c(t)}(g);function Xt(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Xt=function(){return!!e})()}var Yt=function(e){function t(){return o(this,t),e=this,r=arguments,n=h(n=t),p(e,Xt()?Reflect.construct(n,r||[],h(e).constructor):n.apply(e,r));var e,n,r}return d(t,e),c(t)}(g);function Zt(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Zt=function(){return!!e})()}var en=function(e){function t(){return o(this,t),e=this,r=arguments,n=h(n=t),p(e,Zt()?Reflect.construct(n,r||[],h(e).constructor):n.apply(e,r));var e,n,r}return d(t,e),c(t)}(g);function tn(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(tn=function(){return!!e})()}var nn=function(e){function t(){return o(this,t),e=this,r=arguments,n=h(n=t),p(e,tn()?Reflect.construct(n,r||[],h(e).constructor):n.apply(e,r));var e,n,r}return d(t,e),c(t)}(g);function rn(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(rn=function(){return!!e})()}var on=function(e){function t(){return o(this,t),e=this,r=arguments,n=h(n=t),p(e,rn()?Reflect.construct(n,r||[],h(e).constructor):n.apply(e,r));var e,n,r}return d(t,e),c(t)}(g),an=!0,sn="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node,cn=function(){return c((function e(t){o(this,e),this.configuration=t,this.apiKey=this.configuration.apiKey,this.nodes=null==this.configuration.nodes?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=null==this.configuration.nearestNode?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}),[{key:"get",value:(u=E(O().mark((function e(t){var n,r,o,i,a,s,c=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=c.length>1&&void 0!==c[1]?c[1]:{},o=(r=c.length>2&&void 0!==c[2]?c[2]:{}).abortSignal,i=void 0===o?null:o,a=r.responseType,s=void 0===a?void 0:a,e.abrupt("return",this.performRequest("get",t,{queryParameters:n,abortSignal:i,responseType:s}));case 3:case"end":return e.stop()}}),e,this)}))),function(e){return u.apply(this,arguments)})},{key:"delete",value:(s=E(O().mark((function e(t){var n,r=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=r.length>1&&void 0!==r[1]?r[1]:{},e.abrupt("return",this.performRequest("delete",t,{queryParameters:n}));case 2:case"end":return e.stop()}}),e,this)}))),function(e){return s.apply(this,arguments)})},{key:"post",value:(a=E(O().mark((function e(t){var n,r,o,i=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=i.length>1&&void 0!==i[1]?i[1]:{},r=i.length>2&&void 0!==i[2]?i[2]:{},o=i.length>3&&void 0!==i[3]?i[3]:{},e.abrupt("return",this.performRequest("post",t,{queryParameters:r,bodyParameters:n,additionalHeaders:o}));case 4:case"end":return e.stop()}}),e,this)}))),function(e){return a.apply(this,arguments)})},{key:"put",value:(r=E(O().mark((function e(t){var n,r,o=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=o.length>1&&void 0!==o[1]?o[1]:{},r=o.length>2&&void 0!==o[2]?o[2]:{},e.abrupt("return",this.performRequest("put",t,{queryParameters:r,bodyParameters:n}));case 3:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"patch",value:(n=E(O().mark((function e(t){var n,r,o=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=o.length>1&&void 0!==o[1]?o[1]:{},r=o.length>2&&void 0!==o[2]?o[2]:{},e.abrupt("return",this.performRequest("patch",t,{queryParameters:r,bodyParameters:n}));case 3:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"getAdapter",value:function(){if(this.configuration.axiosAdapter)return"function"==typeof this.configuration.axiosAdapter?this.configuration.axiosAdapter:"undefined"!=typeof navigator&&"Cloudflare-Workers"===navigator.userAgent?Mt.getAdapter(this.configuration.axiosAdapter).bind(globalThis):Mt.getAdapter(this.configuration.axiosAdapter)}},{key:"performRequest",value:(t=E(O().mark((function e(t,n,r){var o,a,s,c,u,l,p,h,f,d,y,v,m,g,w,b,C,R,k,E,S=this;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=r.queryParameters,a=void 0===o?null:o,s=r.bodyParameters,c=void 0===s?null:s,u=r.additionalHeaders,l=void 0===u?{}:u,p=r.abortSignal,h=void 0===p?null:p,f=r.responseType,d=void 0===f?void 0:f,y=r.skipConnectionTimeout,v=void 0!==y&&y,m=r.enableKeepAlive,g=void 0===m?void 0:m,this.configuration.validate(),w=Date.now(),C=!1,this.logger.debug("Request #".concat(w,": Performing ").concat(t.toUpperCase()," request: ").concat(n)),R=O().mark((function e(){var r,o,s,u,p,f,y,m,R,k;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=S.getNextNode(w),S.logger.debug("Request #".concat(w,": Attempting ").concat(t.toUpperCase()," request Try #").concat(E," to Node ").concat(r.index)),!h||!h.aborted){e.next=4;break}return e.abrupt("return",{v:Promise.reject(new Error("Request aborted by caller."))});case 4:return e.prev=4,s={adapter:S.getAdapter(),method:t,url:S.uriFor(n,r),headers:Object.assign({},S.defaultHeaders(),l,S.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:d,validateStatus:function(e){return e>0},transformResponse:[function(e,t){var n=e;return void 0!==t&&"string"==typeof e&&t["content-type"]&&t["content-type"].startsWith("application/json")&&(n=JSON.parse(e)),n}]},!0!==v&&(s.timeout=1e3*S.connectionTimeoutSeconds),a&&0!==Object.keys(a).length&&(s.params=a),S.sendApiKeyAsQueryParam&&(s.params=s.params||{},s.params["x-typesense-api-key"]=S.apiKey),S.configuration.httpAgent?(S.logger.debug("Request #".concat(w,": Using custom httpAgent")),s.httpAgent=S.configuration.httpAgent):!0===g&&(sn?(S.logger.debug("Request #".concat(w,": Enabling KeepAlive")),s.httpAgent=new Kt.Agent({keepAlive:!0})):S.logger.warn("Request #".concat(w,": Cannot use custom httpAgent in a browser environment to enable keepAlive"))),S.configuration.httpsAgent?(S.logger.debug("Request #".concat(w,": Using custom httpsAgent")),s.httpsAgent=S.configuration.httpsAgent):!0===g&&(sn?(S.logger.debug("Request #".concat(w,": Enabling keepAlive")),s.httpsAgent=new zt.Agent({keepAlive:!0})):S.logger.warn("Request #".concat(w,": Cannot use custom httpAgent in a browser environment to enable keepAlive"))),S.configuration.paramsSerializer&&(S.logger.debug("Request #".concat(w,": Using custom paramsSerializer")),s.paramsSerializer=S.configuration.paramsSerializer),c&&("string"==typeof c&&0!==c.length||"object"===i(c)&&0!==Object.keys(c).length)&&(s.data=c),h&&(u=Mt.CancelToken,p=u.source(),o=function(){C=!0,p.cancel()},h.addEventListener("abort",o),s.cancelToken=p.token),e.next=16,Mt(s);case 16:if((f=e.sent).status>=1&&f.status<=499&&S.setNodeHealthcheck(r,an),S.logger.debug("Request #".concat(w,": Request to Node ").concat(r.index," was made. Response Code was ").concat(f.status,".")),!(f.status>=200&&f.status<300)){e.next=23;break}return e.abrupt("return",{v:Promise.resolve(f.data)});case 23:if(!(f.status<500)){e.next=27;break}return e.abrupt("return",{v:Promise.reject(S.customErrorForResponse(f,null===(y=f.data)||void 0===y?void 0:y.message,s.data))});case 27:throw S.customErrorForResponse(f,null===(m=f.data)||void 0===m?void 0:m.message,s.data);case 28:e.next=40;break;case 30:if(e.prev=30,e.t0=e.catch(4),C||S.setNodeHealthcheck(r,!1),b=e.t0,S.logger.warn("Request #".concat(w,": Request to Node ").concat(r.index,' failed due to "').concat(null!==(R=null===e.t0||void 0===e.t0?void 0:e.t0.code)&&void 0!==R?R:""," ").concat(e.t0.message).concat(null==e.t0.response?"":" - "+JSON.stringify(null===(k=e.t0.response)||void 0===k?void 0:k.data),'"')),!C){e.next=37;break}return e.abrupt("return",{v:Promise.reject(new Error("Request aborted by caller."))});case 37:return E0&&void 0!==arguments[0]?arguments[0]:0;if(null!=this.nearestNode){if(this.logger.debug("Request #".concat(e,": Nodes Health: Node ").concat(this.nearestNode.index," is ").concat(!0===this.nearestNode.isHealthy?"Healthy":"Unhealthy")),!0===this.nearestNode.isHealthy||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug("Request #".concat(e,": Updated current node to Node ").concat(this.nearestNode.index)),this.nearestNode;this.logger.debug("Request #".concat(e,": Falling back to individual nodes"))}this.logger.debug("Request #".concat(e,": Nodes Health: ").concat(this.nodes.map((function(e){return"Node ".concat(e.index," is ").concat(!0===e.isHealthy?"Healthy":"Unhealthy")})).join(" || ")));for(var t=this.nodes[0],n=0;n<=this.nodes.length;n++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,!0===(t=this.nodes[this.currentNodeIndex]).isHealthy||this.nodeDueForHealthcheck(t,e))return this.logger.debug("Request #".concat(e,": Updated current node to Node ").concat(t.index)),t;return this.logger.debug("Request #".concat(e,": No healthy nodes were found. Returning the next node, Node ").concat(t.index)),t}},{key:"nodeDueForHealthcheck",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=Date.now()-e.lastAccessTimestamp>1e3*this.healthcheckIntervalSeconds;return n&&this.logger.debug("Request #".concat(t,": Node ").concat(e.index," has exceeded healtcheckIntervalSeconds of ").concat(this.healthcheckIntervalSeconds,". Adding it back into rotation.")),n}},{key:"initializeMetadataForNodes",value:function(){var e=this;null!=this.nearestNode&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,an)),this.nodes.forEach((function(t,n){t.index=n,e.setNodeHealthcheck(t,an)}))}},{key:"setNodeHealthcheck",value:function(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}},{key:"uriFor",value:function(e,t){return null!=t.url?"".concat(t.url).concat(e):"".concat(t.protocol,"://").concat(t.host,":").concat(t.port).concat(t.path).concat(e)}},{key:"defaultHeaders",value:function(){var e={};return this.sendApiKeyAsQueryParam||(e["X-TYPESENSE-API-KEY"]=this.apiKey),e["Content-Type"]="application/json",e}},{key:"timer",value:(e=E(O().mark((function e(t){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise((function(e){return setTimeout(e,1e3*t)})));case 1:case"end":return e.stop()}}),e)}))),function(t){return e.apply(this,arguments)})},{key:"customErrorForResponse",value:function(e,t,n){var r="Request failed with HTTP code ".concat(e.status);return"string"==typeof t&&""!==t.trim()&&(r+=" | Server said: ".concat(t)),new g(r,n,e.status),400===e.status?new Wt(r):401===e.status?new Vt(r):404===e.status?new $t(r):409===e.status?new Yt(r):422===e.status?new en(r):e.status>=500&&e.status<=599?new nn(r):new on(r)}}]);var e,t,n,r,a,s,u}(),un="/collections",ln=function(){return c((function e(t){o(this,e),this.apiCall=t}),[{key:"create",value:(t=E(O().mark((function e(t){var n,r=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=r.length>1&&void 0!==r[1]?r[1]:{},e.abrupt("return",this.apiCall.post(un,t,n));case 2:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"retrieve",value:(e=E(O().mark((function e(){var t,n=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=n.length>0&&void 0!==n[0]?n[0]:{},e.abrupt("return",this.apiCall.get(un,t));case 2:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})}],[{key:"RESOURCEPATH",get:function(){return un}}]);var e,t}();function pn(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(pn=function(){return!!e})()}var hn=function(e){function t(e,n,r){var i,a,s,c;return o(this,t),a=this,c=[e],s=h(s=t),(i=p(a,pn()?Reflect.construct(s,c||[],h(a).constructor):s.apply(a,c))).importResults=n,i.payload=r,i}return d(t,e),c(t)}(g);function fn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);nc&&(y=this.responseCache.keys().next().value)&&this.responseCache.delete(y),this.responsePromiseCache.size>c&&(v=this.responsePromiseCache.keys().next().value)&&this.responsePromiseCache.delete(v),e.abrupt("return",d);case 37:case"end":return e.stop()}}),e,this)}))),function(t,n,r,o){return e.apply(this,arguments)})}]);var e}();function mn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function gn(e){return Object.keys(kn).filter((function(t){return void 0!==e[t]})).every((function(t){return n=e[t],!Array.isArray(n);var n}))}function wn(e){var t=function(e){for(var t=1;t1&&void 0!==l[1]?l[1]:{}).cacheSearchResultsForSeconds,o=void 0===r?this.configuration.cacheSearchResultsForSeconds:r,i=n.abortSignal,a=void 0===i?null:i,s={},!0===this.configuration.useServerSideSearchCache&&(s.use_cache=!0),c=wn(t),u=Object.assign({},s,c),e.abrupt("return",this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),u,{abortSignal:a}],{cacheResponseForSeconds:o}));case 6:case"end":return e.stop()}}),e,this)}))),function(t){return e.apply(this,arguments)})},{key:"endpointPath",value:function(e){return"".concat(ln.RESOURCEPATH,"/").concat(this.collectionName).concat(bn).concat(void 0===e?"":"/"+e)}}],[{key:"RESOURCEPATH",get:function(){return bn}}]);var e}();function Rn(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Rn=function(){return!!e})()}var kn={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},En="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node,Sn=function(e){function t(e,n,r){return o(this,t),i=this,s=[e,n,r],a=h(a=t),p(i,Rn()?Reflect.construct(a,s||[],h(i).constructor):a.apply(i,s));var i,a,s}return d(t,e),c(t,[{key:"create",value:(y=E(O().mark((function e(t){var n,r=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=r.length>1&&void 0!==r[1]?r[1]:{},t){e.next=3;break}throw new Error("No document provided");case 3:return e.abrupt("return",this.apiCall.post(this.endpointPath(),t,n));case 4:case"end":return e.stop()}}),e,this)}))),function(e){return y.apply(this,arguments)})},{key:"upsert",value:(f=E(O().mark((function e(t){var n,r=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=r.length>1&&void 0!==r[1]?r[1]:{},t){e.next=3;break}throw new Error("No document provided");case 3:return e.abrupt("return",this.apiCall.post(this.endpointPath(),t,Object.assign({},n,{action:"upsert"})));case 4:case"end":return e.stop()}}),e,this)}))),function(e){return f.apply(this,arguments)})},{key:"update",value:(l=E(O().mark((function e(t){var n,r=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=r.length>1&&void 0!==r[1]?r[1]:{},t){e.next=3;break}throw new Error("No document provided");case 3:if(null==n.filter_by){e.next=7;break}return e.abrupt("return",this.apiCall.patch(this.endpointPath(),t,Object.assign({},n)));case 7:return e.abrupt("return",this.apiCall.post(this.endpointPath(),t,Object.assign({},n,{action:"update"})));case 8:case"end":return e.stop()}}),e,this)}))),function(e){return l.apply(this,arguments)})},{key:"delete",value:(u=E(O().mark((function e(){var t,n=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=n.length>0&&void 0!==n[0]?n[0]:{},e.abrupt("return",this.apiCall.delete(this.endpointPath(),t));case 2:case"end":return e.stop()}}),e,this)}))),function(){return u.apply(this,arguments)})},{key:"createMany",value:(s=E(O().mark((function e(t){var n,r=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=r.length>1&&void 0!==r[1]?r[1]:{},this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),e.abrupt("return",this.import(t,n));case 3:case"end":return e.stop()}}),e,this)}))),function(e){return s.apply(this,arguments)})},{key:"import",value:(a=E(O().mark((function e(t){var n,r,o,i,a,s=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=s.length>1&&void 0!==s[1]?s[1]:{},!Array.isArray(t)){e.next=13;break}e.prev=2,r=t.map((function(e){return JSON.stringify(e)})).join("\n"),e.next=11;break;case 6:if(e.prev=6,e.t0=e.catch(2),!(e.t0 instanceof RangeError&&e.t0.message.includes("Too many properties to enumerate"))){e.next=10;break}throw new Error("".concat(e.t0,"\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n "));case 10:throw new Error(e.t0);case 11:e.next=14;break;case 13:r=t;case 14:return e.next=16,this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:n,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!En});case 16:if(o=e.sent,!Array.isArray(t)){e.next=27;break}if(i=o.split("\n").map((function(e){return JSON.parse(e)})),!((a=i.filter((function(e){return!1===e.success}))).length>0)){e.next=24;break}throw new hn("".concat(i.length-a.length," documents imported successfully, ").concat(a.length," documents failed during import. Use `error.importResults` from the raised exception to get a detailed error reason for each document."),i,{documentsInJSONLFormat:r,options:n,failedItems:a,successCount:i.length-a.length});case 24:return e.abrupt("return",i);case 25:e.next=28;break;case 27:return e.abrupt("return",o);case 28:case"end":return e.stop()}}),e,this,[[2,6]])}))),function(e){return a.apply(this,arguments)})},{key:"importStream",value:(i=E(O().mark((function e(t){var n,r,o,i,a=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=a.length>1&&void 0!==a[1]?a[1]:{},e.next=3,this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:n,bodyParameters:t,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!En});case 3:if(r=e.sent,o=r.split("\n").map((function(e){return JSON.parse(e)})),!((i=o.filter((function(e){return!1===e.success}))).length>0)){e.next=10;break}throw new hn("".concat(o.length-i.length," documents imported successfully, ").concat(i.length," documents failed during import. Use `error.importResults` from the raised exception to get a detailed error reason for each document."),o,{documentsInJSONLFormat:t,options:n,failedItems:i,successCount:o.length-i.length});case 10:return e.abrupt("return",o);case 11:case"end":return e.stop()}}),e,this)}))),function(e){return i.apply(this,arguments)})},{key:"export",value:(r=E(O().mark((function e(){var t,n=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=n.length>0&&void 0!==n[0]?n[0]:{},e.abrupt("return",this.apiCall.get(this.endpointPath("export"),t));case 2:case"end":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:"exportStream",value:(n=E(O().mark((function e(){var t,n=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=n.length>0&&void 0!==n[0]?n[0]:{},e.abrupt("return",this.apiCall.get(this.endpointPath("export"),t,{responseType:"stream"}));case 2:case"end":return e.stop()}}),e,this)}))),function(){return n.apply(this,arguments)})}]);var n,r,i,a,s,u,l,f,y}(Cn),On=function(){function e(t,n){o(this,e),this.collectionName=t,this.apiCall=n}return c(e,[{key:"upsert",value:(n=E(O().mark((function e(t,n){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.put(this.endpointPath(t),n));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"endpointPath",value:function(t){return"".concat(ln.RESOURCEPATH,"/").concat(this.collectionName).concat(e.RESOURCEPATH).concat(void 0===t?"":"/"+encodeURIComponent(t))}}],[{key:"RESOURCEPATH",get:function(){return"/overrides"}}]);var t,n}(),Pn=function(){return c((function e(t,n,r){o(this,e),this.collectionName=t,this.overrideId=n,this.apiCall=r}),[{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"delete",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.delete(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})},{key:"endpointPath",value:function(){return"".concat(ln.RESOURCEPATH,"/").concat(encodeURIComponent(this.collectionName)).concat(On.RESOURCEPATH,"/").concat(encodeURIComponent(this.overrideId))}}]);var e,t}(),xn=function(){function e(t,n){o(this,e),this.collectionName=t,this.apiCall=n}return c(e,[{key:"upsert",value:(n=E(O().mark((function e(t,n){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.put(this.endpointPath(t),n));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"endpointPath",value:function(t){return"".concat(ln.RESOURCEPATH,"/").concat(encodeURIComponent(this.collectionName)).concat(e.RESOURCEPATH).concat(void 0===t?"":"/"+encodeURIComponent(t))}}],[{key:"RESOURCEPATH",get:function(){return"/synonyms"}}]);var t,n}(),An=function(){return c((function e(t,n,r){o(this,e),this.collectionName=t,this.synonymId=n,this.apiCall=r}),[{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"delete",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.delete(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})},{key:"endpointPath",value:function(){return"".concat(ln.RESOURCEPATH,"/").concat(encodeURIComponent(this.collectionName)).concat(xn.RESOURCEPATH,"/").concat(encodeURIComponent(this.synonymId))}}]);var e,t}(),Tn=function(){return c((function e(t,n,r){o(this,e),this.collectionName=t,this.documentId=n,this.apiCall=r}),[{key:"retrieve",value:(n=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return n.apply(this,arguments)})},{key:"delete",value:(t=E(O().mark((function e(t){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.delete(this.endpointPath(),t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"update",value:(e=E(O().mark((function e(t){var n,r=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=r.length>1&&void 0!==r[1]?r[1]:{},e.abrupt("return",this.apiCall.patch(this.endpointPath(),t,n));case 2:case"end":return e.stop()}}),e,this)}))),function(t){return e.apply(this,arguments)})},{key:"endpointPath",value:function(){return"".concat(ln.RESOURCEPATH,"/").concat(encodeURIComponent(this.collectionName)).concat(Sn.RESOURCEPATH,"/").concat(encodeURIComponent(this.documentId))}}]);var e,t,n}(),Nn=function(){return c((function e(t,n,r){o(this,e),u(this,"individualDocuments",{}),u(this,"individualOverrides",{}),u(this,"individualSynonyms",{}),this.name=t,this.apiCall=n,this.configuration=r,this.name=t,this.apiCall=n,this.configuration=r,this._documents=new Sn(this.name,this.apiCall,this.configuration),this._overrides=new On(this.name,this.apiCall),this._synonyms=new xn(this.name,this.apiCall)}),[{key:"retrieve",value:(r=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:"update",value:(n=E(O().mark((function e(t){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.patch(this.endpointPath(),t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"delete",value:(t=E(O().mark((function e(){var t,n=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=n.length>0&&void 0!==n[0]?n[0]:{},e.abrupt("return",this.apiCall.delete(this.endpointPath(),t));case 2:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"exists",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this.retrieve();case 3:return e.abrupt("return",!0);case 6:if(e.prev=6,e.t0=e.catch(0),!(e.t0 instanceof $t)){e.next=10;break}return e.abrupt("return",!1);case 10:throw e.t0;case 11:case"end":return e.stop()}}),e,this,[[0,6]])}))),function(){return e.apply(this,arguments)})},{key:"documents",value:function(e){return e?(void 0===this.individualDocuments[e]&&(this.individualDocuments[e]=new Tn(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}},{key:"overrides",value:function(e){return void 0===e?this._overrides:(void 0===this.individualOverrides[e]&&(this.individualOverrides[e]=new Pn(this.name,e,this.apiCall)),this.individualOverrides[e])}},{key:"synonyms",value:function(e){return void 0===e?this._synonyms:(void 0===this.individualSynonyms[e]&&(this.individualSynonyms[e]=new An(this.name,e,this.apiCall)),this.individualSynonyms[e])}},{key:"endpointPath",value:function(){return"".concat(ln.RESOURCEPATH,"/").concat(encodeURIComponent(this.name))}}]);var e,t,n,r}(),jn="/aliases",_n=function(){function e(t){o(this,e),this.apiCall=t}return c(e,[{key:"upsert",value:(n=E(O().mark((function e(t,n){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.put(this.endpointPath(t),n));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(jn));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"endpointPath",value:function(t){return"".concat(e.RESOURCEPATH,"/").concat(encodeURIComponent(t))}}],[{key:"RESOURCEPATH",get:function(){return jn}}]);var t,n}(),Un=function(){return c((function e(t,n){o(this,e),this.name=t,this.apiCall=n}),[{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"delete",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.delete(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})},{key:"endpointPath",value:function(){return"".concat(_n.RESOURCEPATH,"/").concat(encodeURIComponent(this.name))}}]);var e,t}(),Ln=n(612),In="/keys",Fn=function(){function e(t){o(this,e),this.apiCall=t,this.apiCall=t}return c(e,[{key:"create",value:(n=E(O().mark((function t(n){return O().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this.apiCall.post(e.RESOURCEPATH,n));case 1:case"end":return t.stop()}}),t,this)}))),function(e){return n.apply(this,arguments)})},{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(In));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"generateScopedSearchKey",value:function(e,t){var n=wn(t),r=JSON.stringify(n),o=Buffer.from((0,Ln.createHmac)("sha256",e).update(r).digest("base64")),i=e.substr(0,4),a="".concat(o).concat(i).concat(r);return Buffer.from(a).toString("base64")}}],[{key:"RESOURCEPATH",get:function(){return In}}]);var t,n}(),qn=function(){return c((function e(t,n){o(this,e),this.id=t,this.apiCall=n}),[{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"delete",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.delete(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})},{key:"endpointPath",value:function(){return"".concat(Fn.RESOURCEPATH,"/").concat(encodeURIComponent(this.id))}}]);var e,t}(),Dn=function(){return c((function e(t){o(this,e),this.apiCall=t}),[{key:"retrieve",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get("/debug"));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})}]);var e}(),Bn=function(){return c((function e(t){o(this,e),this.apiCall=t}),[{key:"retrieve",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get("/metrics.json"));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})}]);var e}(),Hn=function(){return c((function e(t){o(this,e),this.apiCall=t}),[{key:"retrieve",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get("/stats.json"));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})}]);var e}(),Mn=function(){return c((function e(t){o(this,e),this.apiCall=t}),[{key:"retrieve",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get("/health"));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})}]);var e}(),Kn=function(){return c((function e(t){o(this,e),this.apiCall=t}),[{key:"perform",value:(e=E(O().mark((function e(t){var n,r=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=r.length>1&&void 0!==r[1]?r[1]:{},e.abrupt("return",this.apiCall.post("".concat("/operations","/").concat(t),{},n));case 2:case"end":return e.stop()}}),e,this)}))),function(t){return e.apply(this,arguments)})}]);var e}();function zn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Jn(e){for(var t=1;t2&&void 0!==arguments[2]&&arguments[2];o(this,e),this.apiCall=t,this.configuration=n,this.useTextContentType=r,this.requestWithCache=new vn}),[{key:"clearCache",value:function(){this.requestWithCache.clearCache()}},{key:"perform",value:(e=E(O().mark((function e(t){var n,r,o,i,a,s,c,u,l=arguments;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=l.length>1&&void 0!==l[1]?l[1]:{},r=(l.length>2&&void 0!==l[2]?l[2]:{}).cacheSearchResultsForSeconds,o=void 0===r?this.configuration.cacheSearchResultsForSeconds:r,i={},this.useTextContentType&&(i["content-type"]="text/plain"),a={},!0===this.configuration.useServerSideSearchCache&&(a.use_cache=!0),s=Jn(Jn({},n),a),c={searches:t.searches.map(wn)},u=wn(s),e.abrupt("return",this.requestWithCache.perform(this.apiCall,this.apiCall.post,["/multi_search",c,u,i],{cacheResponseForSeconds:o}));case 10:case"end":return e.stop()}}),e,this)}))),function(t){return e.apply(this,arguments)})}]);var e}(),Gn=function(){function e(t){o(this,e),this.apiCall=t}return c(e,[{key:"upsert",value:(n=E(O().mark((function e(t,n){var r,o;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("object"!==i(n.value)||!("searches"in n.value)){e.next=3;break}return r=n.value.searches.map((function(e){return wn(e)})),e.abrupt("return",this.apiCall.put(this.endpointPath(t),{value:{searches:r}}));case 3:return o=wn(n.value),e.abrupt("return",this.apiCall.put(this.endpointPath(t),{value:o}));case 5:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"endpointPath",value:function(t){return"".concat(e.RESOURCEPATH).concat(void 0===t?"":"/"+encodeURIComponent(t))}}],[{key:"RESOURCEPATH",get:function(){return"/presets"}}]);var t,n}(),Vn=function(){return c((function e(t,n){o(this,e),this.presetId=t,this.apiCall=n}),[{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"delete",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.delete(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})},{key:"endpointPath",value:function(){return"".concat(Gn.RESOURCEPATH,"/").concat(encodeURIComponent(this.presetId))}}]);var e,t}(),Qn=function(){function e(t){o(this,e),this.apiCall=t,this.apiCall=t}return c(e,[{key:"upsert",value:(n=E(O().mark((function e(t,n){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.put(this.endpointPath(t),n));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"endpointPath",value:function(t){return"".concat(e.RESOURCEPATH).concat(void 0===t?"":"/"+encodeURIComponent(t))}}],[{key:"RESOURCEPATH",get:function(){return"/analytics/rules"}}]);var t,n}(),$n=function(){return c((function e(t,n){o(this,e),this.name=t,this.apiCall=n}),[{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"delete",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.delete(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})},{key:"endpointPath",value:function(){return"".concat(Qn.RESOURCEPATH,"/").concat(encodeURIComponent(this.name))}}]);var e,t}(),Xn=function(){function e(t){o(this,e),this.apiCall=t,this.apiCall=t}return c(e,[{key:"create",value:(t=E(O().mark((function e(t){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.post(this.endpointPath(),t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"endpointPath",value:function(t){return"".concat(e.RESOURCEPATH).concat(void 0===t?"":"/"+encodeURIComponent(t))}}],[{key:"RESOURCEPATH",get:function(){return"/analytics/events"}}]);var t}(),Yn=function(){return c((function e(t){o(this,e),u(this,"individualAnalyticsRules",{}),this.apiCall=t,this.apiCall=t,this._analyticsRules=new Qn(this.apiCall),this._analyticsEvents=new Xn(this.apiCall)}),[{key:"rules",value:function(e){return void 0===e?this._analyticsRules:(void 0===this.individualAnalyticsRules[e]&&(this.individualAnalyticsRules[e]=new $n(e,this.apiCall)),this.individualAnalyticsRules[e])}},{key:"events",value:function(){return this._analyticsEvents}}],[{key:"RESOURCEPATH",get:function(){return"/analytics"}}])}(),Zn=function(){function e(t){o(this,e),this.apiCall=t}return c(e,[{key:"upsert",value:(n=E(O().mark((function e(t,n){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.put(this.endpointPath(t),n));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"endpointPath",value:function(t){return"".concat(e.RESOURCEPATH).concat(void 0===t?"":"/"+encodeURIComponent(t))}}],[{key:"RESOURCEPATH",get:function(){return"/stopwords"}}]);var t,n}(),er=function(){return c((function e(t,n){o(this,e),this.stopwordId=t,this.apiCall=n}),[{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"delete",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.delete(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})},{key:"endpointPath",value:function(){return"".concat(Zn.RESOURCEPATH,"/").concat(encodeURIComponent(this.stopwordId))}}]);var e,t}(),tr=function(){function e(t){o(this,e),this.apiCall=t,this.apiCall=t}return c(e,[{key:"create",value:(n=E(O().mark((function e(t){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.post(this.endpointPath(),t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"endpointPath",value:function(t){return"".concat(e.RESOURCEPATH).concat(void 0===t?"":"/"+encodeURIComponent(t))}}],[{key:"RESOURCEPATH",get:function(){return"/conversations/models"}}]);var t,n}(),nr=function(){return c((function e(t,n){o(this,e),this.id=t,this.apiCall=n}),[{key:"update",value:(n=E(O().mark((function e(t){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.put(this.endpointPath(),t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"retrieve",value:(t=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"delete",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.delete(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})},{key:"endpointPath",value:function(){return"".concat(tr.RESOURCEPATH,"/").concat(encodeURIComponent(this.id))}}]);var e,t,n}(),rr="/conversations",or=function(){return c((function e(t){o(this,e),u(this,"individualConversationModels",{}),this.apiCall=t,this.apiCall=t,this._conversationsModels=new tr(this.apiCall)}),[{key:"retrieve",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(rr));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})},{key:"models",value:function(e){return void 0===e?this._conversationsModels:(void 0===this.individualConversationModels[e]&&(this.individualConversationModels[e]=new nr(e,this.apiCall)),this.individualConversationModels[e])}}],[{key:"RESOURCEPATH",get:function(){return rr}}]);var e}(),ir=function(){return c((function e(t,n){o(this,e),this.id=t,this.apiCall=n}),[{key:"retrieve",value:(n=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.get(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return n.apply(this,arguments)})},{key:"update",value:(t=E(O().mark((function e(t){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.put(this.endpointPath(),t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"delete",value:(e=E(O().mark((function e(){return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiCall.delete(this.endpointPath()));case 1:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})},{key:"endpointPath",value:function(){return"".concat(or.RESOURCEPATH,"/").concat(encodeURIComponent(this.id))}}]);var e,t,n}(),ar=function(){return c((function e(t){var n;o(this,e),t.sendApiKeyAsQueryParam=null!==(n=t.sendApiKeyAsQueryParam)&&void 0!==n&&n,this.configuration=new R(t),this.apiCall=new cn(this.configuration),this.debug=new Dn(this.apiCall),this.metrics=new Bn(this.apiCall),this.stats=new Hn(this.apiCall),this.health=new Mn(this.apiCall),this.operations=new Kn(this.apiCall),this.multiSearch=new Wn(this.apiCall,this.configuration),this._collections=new ln(this.apiCall),this.individualCollections={},this._aliases=new _n(this.apiCall),this.individualAliases={},this._keys=new Fn(this.apiCall),this.individualKeys={},this._presets=new Gn(this.apiCall),this.individualPresets={},this._stopwords=new Zn(this.apiCall),this.individualStopwords={},this.analytics=new Yn(this.apiCall),this._conversations=new or(this.apiCall),this.individualConversations={}}),[{key:"collections",value:function(e){return void 0===e?this._collections:(void 0===this.individualCollections[e]&&(this.individualCollections[e]=new Nn(e,this.apiCall,this.configuration)),this.individualCollections[e])}},{key:"aliases",value:function(e){return void 0===e?this._aliases:(void 0===this.individualAliases[e]&&(this.individualAliases[e]=new Un(e,this.apiCall)),this.individualAliases[e])}},{key:"keys",value:function(e){return void 0===e?this._keys:(void 0===this.individualKeys[e]&&(this.individualKeys[e]=new qn(e,this.apiCall)),this.individualKeys[e])}},{key:"presets",value:function(e){return void 0===e?this._presets:(void 0===this.individualPresets[e]&&(this.individualPresets[e]=new Vn(e,this.apiCall)),this.individualPresets[e])}},{key:"stopwords",value:function(e){return void 0===e?this._stopwords:(void 0===this.individualStopwords[e]&&(this.individualStopwords[e]=new er(e,this.apiCall)),this.individualStopwords[e])}},{key:"conversations",value:function(e){return void 0===e?this._conversations:(void 0===this.individualConversations[e]&&(this.individualConversations[e]=new ir(e,this.apiCall)),this.individualConversations[e])}}])}();var sr=function(){return c((function e(t,n,r){o(this,e),this.name=t,this.apiCall=n,this.configuration=r,this._documents=new Cn(this.name,this.apiCall,this.configuration)}),[{key:"documents",value:function(){return this._documents}}])}(),cr=function(){return c((function e(t){var n;o(this,e),t.sendApiKeyAsQueryParam=null===(n=t.sendApiKeyAsQueryParam)||void 0===n||n,!0===t.sendApiKeyAsQueryParam&&(t.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),t.sendApiKeyAsQueryParam=!1),this.configuration=new R(t),this.apiCall=new cn(this.configuration),this.multiSearch=new Wn(this.apiCall,this.configuration,!0),this.individualCollections={}}),[{key:"clearCache",value:function(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach((function(e){var t,n,r=(n=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,s=[],c=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){u=!0,o=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return s}}(t,n)||dn(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());r[0],r[1].documents().clearCache()}))}},{key:"collections",value:function(e){if(e)return void 0===this.individualCollections[e]&&(this.individualCollections[e]=new sr(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}}])}();const ur={Client:ar,SearchClient:cr,Errors:t}})(),Typesense=r})(); -//# sourceMappingURL=typesense.min.js.map \ No newline at end of file diff --git a/dist/typesense.min.js.LICENSE.txt b/dist/typesense.min.js.LICENSE.txt deleted file mode 100644 index ae386fb7..00000000 --- a/dist/typesense.min.js.LICENSE.txt +++ /dev/null @@ -1 +0,0 @@ -/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ diff --git a/dist/typesense.min.js.map b/dist/typesense.min.js.map deleted file mode 100644 index 268ff828..00000000 --- a/dist/typesense.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"typesense.min.js","mappings":"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","sources":["webpack://Typesense/./node_modules/loglevel/lib/loglevel.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/regeneratorRuntime.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/typeof.js","webpack://Typesense/./node_modules/@babel/runtime/regenerator/index.js","webpack://Typesense/webpack/bootstrap","webpack://Typesense/webpack/runtime/compat get default export","webpack://Typesense/webpack/runtime/define property getters","webpack://Typesense/webpack/runtime/hasOwnProperty shorthand","webpack://Typesense/webpack/runtime/make namespace object","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/construct.js","webpack://Typesense/./src/Typesense/Errors/TypesenseError.ts","webpack://Typesense/./src/Typesense/Errors/MissingConfigurationError.ts","webpack://Typesense/./src/Typesense/Configuration.ts","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://Typesense/./node_modules/axios/lib/helpers/bind.js","webpack://Typesense/./node_modules/axios/lib/utils.js","webpack://Typesense/./node_modules/axios/lib/core/AxiosError.js","webpack://Typesense/./node_modules/axios/lib/helpers/toFormData.js","webpack://Typesense/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js","webpack://Typesense/./node_modules/axios/lib/helpers/buildURL.js","webpack://Typesense/./node_modules/axios/lib/core/InterceptorManager.js","webpack://Typesense/./node_modules/axios/lib/defaults/transitional.js","webpack://Typesense/./node_modules/axios/lib/platform/browser/index.js","webpack://Typesense/./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","webpack://Typesense/./node_modules/axios/lib/platform/browser/classes/FormData.js","webpack://Typesense/./node_modules/axios/lib/platform/browser/classes/Blob.js","webpack://Typesense/./node_modules/axios/lib/platform/common/utils.js","webpack://Typesense/./node_modules/axios/lib/platform/index.js","webpack://Typesense/./node_modules/axios/lib/helpers/formDataToJSON.js","webpack://Typesense/./node_modules/axios/lib/defaults/index.js","webpack://Typesense/./node_modules/axios/lib/helpers/toURLEncodedForm.js","webpack://Typesense/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://Typesense/./node_modules/axios/lib/core/AxiosHeaders.js","webpack://Typesense/./node_modules/axios/lib/core/transformData.js","webpack://Typesense/./node_modules/axios/lib/cancel/isCancel.js","webpack://Typesense/./node_modules/axios/lib/cancel/CanceledError.js","webpack://Typesense/./node_modules/axios/lib/core/settle.js","webpack://Typesense/./node_modules/axios/lib/helpers/speedometer.js","webpack://Typesense/./node_modules/axios/lib/helpers/progressEventReducer.js","webpack://Typesense/./node_modules/axios/lib/helpers/throttle.js","webpack://Typesense/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://Typesense/./node_modules/axios/lib/helpers/cookies.js","webpack://Typesense/./node_modules/axios/lib/core/buildFullPath.js","webpack://Typesense/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://Typesense/./node_modules/axios/lib/helpers/combineURLs.js","webpack://Typesense/./node_modules/axios/lib/core/mergeConfig.js","webpack://Typesense/./node_modules/axios/lib/helpers/resolveConfig.js","webpack://Typesense/./node_modules/axios/lib/adapters/xhr.js","webpack://Typesense/./node_modules/axios/lib/helpers/parseProtocol.js","webpack://Typesense/./node_modules/axios/lib/helpers/composeSignals.js","webpack://Typesense/./node_modules/axios/lib/helpers/trackStream.js","webpack://Typesense/./node_modules/axios/lib/adapters/fetch.js","webpack://Typesense/./node_modules/axios/lib/adapters/adapters.js","webpack://Typesense/./node_modules/axios/lib/helpers/null.js","webpack://Typesense/./node_modules/axios/lib/core/dispatchRequest.js","webpack://Typesense/./node_modules/axios/lib/env/data.js","webpack://Typesense/./node_modules/axios/lib/helpers/validator.js","webpack://Typesense/./node_modules/axios/lib/core/Axios.js","webpack://Typesense/./node_modules/axios/lib/cancel/CancelToken.js","webpack://Typesense/./node_modules/axios/lib/helpers/HttpStatusCode.js","webpack://Typesense/./node_modules/axios/lib/axios.js","webpack://Typesense/./node_modules/axios/lib/helpers/spread.js","webpack://Typesense/./node_modules/axios/lib/helpers/isAxiosError.js","webpack://Typesense/./src/Typesense/Errors/RequestMalformed.ts","webpack://Typesense/./src/Typesense/Errors/RequestUnauthorized.ts","webpack://Typesense/./src/Typesense/Errors/ObjectNotFound.ts","webpack://Typesense/./src/Typesense/Errors/ObjectAlreadyExists.ts","webpack://Typesense/./src/Typesense/Errors/ObjectUnprocessable.ts","webpack://Typesense/./src/Typesense/Errors/ServerError.ts","webpack://Typesense/./src/Typesense/Errors/HTTPError.ts","webpack://Typesense/./src/Typesense/ApiCall.ts","webpack://Typesense/./src/Typesense/Collections.ts","webpack://Typesense/./src/Typesense/Errors/ImportError.ts","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://Typesense/./src/Typesense/RequestWithCache.ts","webpack://Typesense/./src/Typesense/Utils.ts","webpack://Typesense/./src/Typesense/SearchOnlyDocuments.ts","webpack://Typesense/./src/Typesense/Documents.ts","webpack://Typesense/./src/Typesense/Overrides.ts","webpack://Typesense/./src/Typesense/Override.ts","webpack://Typesense/./src/Typesense/Synonyms.ts","webpack://Typesense/./src/Typesense/Synonym.ts","webpack://Typesense/./src/Typesense/Document.ts","webpack://Typesense/./src/Typesense/Collection.ts","webpack://Typesense/./src/Typesense/Aliases.ts","webpack://Typesense/./src/Typesense/Alias.ts","webpack://Typesense/./src/Typesense/Keys.ts","webpack://Typesense/./src/Typesense/Key.ts","webpack://Typesense/./src/Typesense/Debug.ts","webpack://Typesense/./src/Typesense/Metrics.ts","webpack://Typesense/./src/Typesense/Stats.ts","webpack://Typesense/./src/Typesense/Health.ts","webpack://Typesense/./src/Typesense/Operations.ts","webpack://Typesense/./src/Typesense/MultiSearch.ts","webpack://Typesense/./src/Typesense/Presets.ts","webpack://Typesense/./src/Typesense/Preset.ts","webpack://Typesense/./src/Typesense/AnalyticsRules.ts","webpack://Typesense/./src/Typesense/AnalyticsRule.ts","webpack://Typesense/./src/Typesense/AnalyticsEvents.ts","webpack://Typesense/./src/Typesense/Analytics.ts","webpack://Typesense/./src/Typesense/Stopwords.ts","webpack://Typesense/./src/Typesense/Stopword.ts","webpack://Typesense/./src/Typesense/ConversationModels.ts","webpack://Typesense/./src/Typesense/ConversationModel.ts","webpack://Typesense/./src/Typesense/Conversations.ts","webpack://Typesense/./src/Typesense/Conversation.ts","webpack://Typesense/./src/Typesense/Client.ts","webpack://Typesense/./src/Typesense/SearchOnlyCollection.ts","webpack://Typesense/./src/Typesense/SearchClient.ts","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://Typesense/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://Typesense/./src/Typesense.ts"],"sourcesContent":["/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n var _loggersByName = {};\n var defaultLogger = null;\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods() {\n /*jshint validthis:true */\n var level = this.getLevel();\n\n // Replace the actual methods.\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, this.name);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n\n // Return any important warnings.\n if (typeof console === undefinedType && level < this.levels.SILENT) {\n return \"No console available for logging\";\n }\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, _level, _loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, factory) {\n // Private instance variables.\n var self = this;\n /**\n * The level inherited from a parent logger (or a global default). We\n * cache this here rather than delegating to the parent so that it stays\n * in sync with the actual logging methods that we have installed (the\n * parent could change levels but we might not have rebuilt the loggers\n * in this child yet).\n * @type {number}\n */\n var inheritedLevel;\n /**\n * The default level for this logger, if any. If set, this overrides\n * `inheritedLevel`.\n * @type {number|null}\n */\n var defaultLevel;\n /**\n * A user-specific level for this logger. If set, this overrides\n * `defaultLevel`.\n * @type {number|null}\n */\n var userLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var cookieName = encodeURIComponent(storageKey);\n var location = cookie.indexOf(cookieName + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(\n cookie.slice(location + cookieName.length + 1)\n )[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage.removeItem(storageKey);\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {}\n }\n\n function normalizeLevel(input) {\n var level = input;\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n return level;\n } else {\n throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n }\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n if (userLevel != null) {\n return userLevel;\n } else if (defaultLevel != null) {\n return defaultLevel;\n } else {\n return inheritedLevel;\n }\n };\n\n self.setLevel = function (level, persist) {\n userLevel = normalizeLevel(level);\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(userLevel);\n }\n\n // NOTE: in v2, this should call rebuild(), which updates children.\n return replaceLoggingMethods.call(self);\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = normalizeLevel(level);\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n userLevel = null;\n clearPersistedLevel();\n replaceLoggingMethods.call(self);\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n self.rebuild = function () {\n if (defaultLogger !== self) {\n inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n }\n replaceLoggingMethods.call(self);\n\n if (defaultLogger === self) {\n for (var childName in _loggersByName) {\n _loggersByName[childName].rebuild();\n }\n }\n };\n\n // Initialize all the internal levels.\n inheritedLevel = normalizeLevel(\n defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n );\n var initialLevel = getPersistedLevel();\n if (initialLevel != null) {\n userLevel = normalizeLevel(initialLevel);\n }\n replaceLoggingMethods.call(self);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n defaultLogger = new Logger();\n\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name,\n defaultLogger.methodFactory\n );\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return e;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var t,\n e = {},\n r = Object.prototype,\n n = r.hasOwnProperty,\n o = Object.defineProperty || function (t, e, r) {\n t[e] = r.value;\n },\n i = \"function\" == typeof Symbol ? Symbol : {},\n a = i.iterator || \"@@iterator\",\n c = i.asyncIterator || \"@@asyncIterator\",\n u = i.toStringTag || \"@@toStringTag\";\n function define(t, e, r) {\n return Object.defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), t[e];\n }\n try {\n define({}, \"\");\n } catch (t) {\n define = function define(t, e, r) {\n return t[e] = r;\n };\n }\n function wrap(t, e, r, n) {\n var i = e && e.prototype instanceof Generator ? e : Generator,\n a = Object.create(i.prototype),\n c = new Context(n || []);\n return o(a, \"_invoke\", {\n value: makeInvokeMethod(t, r, c)\n }), a;\n }\n function tryCatch(t, e, r) {\n try {\n return {\n type: \"normal\",\n arg: t.call(e, r)\n };\n } catch (t) {\n return {\n type: \"throw\",\n arg: t\n };\n }\n }\n e.wrap = wrap;\n var h = \"suspendedStart\",\n l = \"suspendedYield\",\n f = \"executing\",\n s = \"completed\",\n y = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var p = {};\n define(p, a, function () {\n return this;\n });\n var d = Object.getPrototypeOf,\n v = d && d(d(values([])));\n v && v !== r && n.call(v, a) && (p = v);\n var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);\n function defineIteratorMethods(t) {\n [\"next\", \"throw\", \"return\"].forEach(function (e) {\n define(t, e, function (t) {\n return this._invoke(e, t);\n });\n });\n }\n function AsyncIterator(t, e) {\n function invoke(r, o, i, a) {\n var c = tryCatch(t[r], t, o);\n if (\"throw\" !== c.type) {\n var u = c.arg,\n h = u.value;\n return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n invoke(\"next\", t, i, a);\n }, function (t) {\n invoke(\"throw\", t, i, a);\n }) : e.resolve(h).then(function (t) {\n u.value = t, i(u);\n }, function (t) {\n return invoke(\"throw\", t, i, a);\n });\n }\n a(c.arg);\n }\n var r;\n o(this, \"_invoke\", {\n value: function value(t, n) {\n function callInvokeWithMethodAndArg() {\n return new e(function (e, r) {\n invoke(t, n, e, r);\n });\n }\n return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(e, r, n) {\n var o = h;\n return function (i, a) {\n if (o === f) throw Error(\"Generator is already running\");\n if (o === s) {\n if (\"throw\" === i) throw a;\n return {\n value: t,\n done: !0\n };\n }\n for (n.method = i, n.arg = a;;) {\n var c = n.delegate;\n if (c) {\n var u = maybeInvokeDelegate(c, n);\n if (u) {\n if (u === y) continue;\n return u;\n }\n }\n if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n if (o === h) throw o = s, n.arg;\n n.dispatchException(n.arg);\n } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n o = f;\n var p = tryCatch(e, r, n);\n if (\"normal\" === p.type) {\n if (o = n.done ? s : l, p.arg === y) continue;\n return {\n value: p.arg,\n done: n.done\n };\n }\n \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n }\n };\n }\n function maybeInvokeDelegate(e, r) {\n var n = r.method,\n o = e.iterator[n];\n if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y;\n var i = tryCatch(o, e.iterator, r.arg);\n if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n var a = i.arg;\n return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y);\n }\n function pushTryEntry(t) {\n var e = {\n tryLoc: t[0]\n };\n 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);\n }\n function resetTryEntry(t) {\n var e = t.completion || {};\n e.type = \"normal\", delete e.arg, t.completion = e;\n }\n function Context(t) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], t.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(e) {\n if (e || \"\" === e) {\n var r = e[a];\n if (r) return r.call(e);\n if (\"function\" == typeof e.next) return e;\n if (!isNaN(e.length)) {\n var o = -1,\n i = function next() {\n for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n return next.value = t, next.done = !0, next;\n };\n return i.next = i;\n }\n }\n throw new TypeError(_typeof(e) + \" is not iterable\");\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), o(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n var e = \"function\" == typeof t && t.constructor;\n return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n }, e.mark = function (t) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t;\n }, e.awrap = function (t) {\n return {\n __await: t\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n return this;\n }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n void 0 === i && (i = Promise);\n var a = new AsyncIterator(wrap(t, r, n, o), i);\n return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n return t.done ? t.value : a.next();\n });\n }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n return this;\n }), define(g, \"toString\", function () {\n return \"[object Generator]\";\n }), e.keys = function (t) {\n var e = Object(t),\n r = [];\n for (var n in e) r.push(n);\n return r.reverse(), function next() {\n for (; r.length;) {\n var t = r.pop();\n if (t in e) return next.value = t, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, e.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(e) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);\n },\n stop: function stop() {\n this.done = !0;\n var t = this.tryEntries[0].completion;\n if (\"throw\" === t.type) throw t.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(e) {\n if (this.done) throw e;\n var r = this;\n function handle(n, o) {\n return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n }\n for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n var i = this.tryEntries[o],\n a = i.completion;\n if (\"root\" === i.tryLoc) return handle(\"end\");\n if (i.tryLoc <= this.prev) {\n var c = n.call(i, \"catchLoc\"),\n u = n.call(i, \"finallyLoc\");\n if (c && u) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n } else if (c) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n } else {\n if (!u) throw Error(\"try statement without catch or finally\");\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(t, e) {\n for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n var o = this.tryEntries[r];\n if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n var i = o;\n break;\n }\n }\n i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n var a = i ? i.completion : {};\n return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n },\n complete: function complete(t, e) {\n if (\"throw\" === t.type) throw t.arg;\n return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y;\n },\n finish: function finish(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n }\n },\n \"catch\": function _catch(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.tryLoc === t) {\n var n = r.completion;\n if (\"throw\" === n.type) {\n var o = n.arg;\n resetTryEntry(r);\n }\n return o;\n }\n }\n throw Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(e, r, n) {\n return this.delegate = {\n iterator: values(e),\n resultName: r,\n nextLoc: n\n }, \"next\" === this.method && (this.arg = t), y;\n }\n }, e;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nexport { _createClass as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nexport { _assertThisInitialized as default };","function _getPrototypeOf(t) {\n return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","function _isNativeReflectConstruct() {\n try {\n var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n } catch (t) {}\n return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n return !!t;\n })();\n}\nexport { _isNativeReflectConstruct as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nfunction _wrapNativeSuper(t) {\n var r = \"function\" == typeof Map ? new Map() : void 0;\n return _wrapNativeSuper = function _wrapNativeSuper(t) {\n if (null === t || !isNativeFunction(t)) return t;\n if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\");\n if (void 0 !== r) {\n if (r.has(t)) return r.get(t);\n r.set(t, Wrapper);\n }\n function Wrapper() {\n return construct(t, arguments, getPrototypeOf(this).constructor);\n }\n return Wrapper.prototype = Object.create(t.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: !1,\n writable: !0,\n configurable: !0\n }\n }), setPrototypeOf(Wrapper, t);\n }, _wrapNativeSuper(t);\n}\nexport { _wrapNativeSuper as default };","function _isNativeFunction(t) {\n try {\n return -1 !== Function.toString.call(t).indexOf(\"[native code]\");\n } catch (n) {\n return \"function\" == typeof t;\n }\n}\nexport { _isNativeFunction as default };","import isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _construct(t, e, r) {\n if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);\n var o = [null];\n o.push.apply(o, e);\n var p = new (t.bind.apply(t, o))();\n return r && setPrototypeOf(p, r.prototype), p;\n}\nexport { _construct as default };","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import * as logger from \"loglevel\";\nimport { Logger, LogLevelDesc } from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: LogLevelDesc;\n logger?: Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: Logger;\n readonly logLevel: LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","function asyncGeneratorStep(n, t, e, r, o, a, c) {\n try {\n var i = n[a](c),\n u = i.value;\n } catch (n) {\n return void e(n);\n }\n i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n return function () {\n var t = this,\n e = arguments;\n return new Promise(function (r, o) {\n var a = n.apply(t, e);\n function _next(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n }\n function _throw(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n }\n _next(void 0);\n });\n };\n}\nexport { _asyncToGenerator as default };","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.7.9\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nexport { _arrayLikeToArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n }\n}\nexport { _unsupportedIterableToArray as default };","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nfunction _toConsumableArray(r) {\n return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nexport { _toConsumableArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nexport { _arrayWithoutHoles as default };","function _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nexport { _iterableToArray as default };","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableSpread as default };","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _slicedToArray(r, e) {\n return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nexport { _slicedToArray as default };","function _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nexport { _arrayWithHoles as default };","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nexport { _iterableToArrayLimit as default };","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableRest as default };","import Client from \"./Typesense/Client\";\nimport SearchClient from \"./Typesense/SearchClient\";\nimport * as Errors from \"./Typesense/Errors\";\n\nexport { Client, SearchClient, Errors };\nexport default { Client, SearchClient, Errors };\n"],"names":["noop","undefinedType","isIE","window","navigator","test","userAgent","logMethods","_loggersByName","defaultLogger","bindMethod","obj","methodName","method","bind","Function","prototype","call","e","apply","arguments","traceForIE","console","log","trace","replaceLoggingMethods","level","this","getLevel","i","length","methodFactory","name","debug","levels","SILENT","enableLoggingWhenConsoleArrives","defaultMethodFactory","_level","_loggerName","undefined","realMethod","Logger","factory","inheritedLevel","defaultLevel","userLevel","self","storageKey","getPersistedLevel","storedLevel","localStorage","ignore","cookie","document","cookieName","encodeURIComponent","location","indexOf","exec","slice","normalizeLevel","input","toUpperCase","TypeError","setLevel","persist","levelNum","levelName","persistLevelIfPossible","setDefaultLevel","resetLevel","removeItem","clearPersistedLevel","enableAll","TRACE","disableAll","rebuild","childName","initialLevel","getLogger","logger","_log","noConflict","getLoggers","_typeof","_regeneratorRuntime","module","exports","__esModule","t","r","Object","n","hasOwnProperty","o","defineProperty","value","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","constructor","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","delegateYield","runtime","regeneratorRuntime","accidentalStrictMode","globalThis","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","definition","key","get","prop","_classCallCheck","toPropertyKey","toPrimitive","String","_defineProperties","_createClass","_defineProperty","_possibleConstructorReturn","ReferenceError","_getPrototypeOf","_setPrototypeOf","_inherits","_isNativeReflectConstruct","Boolean","valueOf","Reflect","construct","_wrapNativeSuper","Map","toString","has","set","Wrapper","TypesenseError","_Error","message","httpBody","httpStatus","_this","MissingConfigurationError","_TypesenseError","Configuration","options","nodes","map","node","setDefaultPathInNode","setDefaultPortInNode","_objectSpread","randomizeNodes","shuffleArray","nearestNode","connectionTimeoutSeconds","timeoutSeconds","healthcheckIntervalSeconds","numRetries","retryIntervalSeconds","apiKey","sendApiKeyAsQueryParam","cacheSearchResultsForSeconds","useServerSideSearchCache","axiosAdapter","logLevel","additionalHeaders","httpAgent","httpsAgent","paramsSerializer","showDeprecationWarnings","validate","validateNodes","isNodeMissingAnyParameters","_this2","some","every","warn","masterNode","readReplicaNodes","array","j","Math","floor","random","_ref","asyncGeneratorStep","_asyncToGenerator","_next","_throw","fn","thisArg","kindOf","cache","thing","str","toLowerCase","kindOfTest","typeOfTest","isArray","Array","isUndefined","isArrayBuffer","isString","isFunction","isNumber","isObject","isPlainObject","val","isDate","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","allOwnKeys","getOwnPropertyNames","len","findKey","_key","_global","global","isContextDefined","context","isTypedArray","TypedArray","Uint8Array","isHTMLForm","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","ret","defineProperties","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","isAsyncFn","_setImmediate","setImmediateSupported","setImmediate","postMessageSupported","postMessage","token","callbacks","addEventListener","source","data","shift","cb","setTimeout","asap","queueMicrotask","process","nextTick","isBuffer","isFormData","kind","FormData","append","isArrayBufferView","result","ArrayBuffer","isView","buffer","isBoolean","isStream","pipe","merge","caseless","assignValue","targetKey","extend","b","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","assign","toFlatObject","sourceObj","destObj","filter","propFilter","merged","endsWith","searchString","position","lastIndex","toArray","arr","forEachEntry","pair","matchAll","regExp","matches","hasOwnProp","freezeMethods","toObjectSet","arrayOrString","delimiter","split","toCamelCase","m","p1","p2","toFiniteNumber","defaultValue","Number","isFinite","generateString","size","alphabet","isSpecCompliantForm","toJSONObject","stack","visit","target","reducedValue","isThenable","catch","AxiosError","code","config","request","response","captureStackTrace","status","utils","toJSON","description","number","fileName","lineNumber","columnNumber","from","error","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","path","dots","concat","join","predicates","formData","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","JSON","stringify","isFlatArray","el","index","exposedHelpers","build","encode","charMap","match","AxiosURLSearchParams","params","_pairs","encoder","_encode","buildURL","url","serialize","serializeFn","serializedParams","hashmarkIndex","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","id","clear","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","isBrowser","classes","URLSearchParams","protocols","hasBrowserEnv","_navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","href","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","platform","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parse","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","parsed","line","substring","parseHeaders","parser","tokens","tokensRE","parseTokens","matcher","deleted","deleteHeader","normalize","format","normalized","w","char","formatHeader","targets","asStrings","first","computed","accessor","accessors","defineAccessor","accessorName","arg1","arg2","arg3","buildAccessors","mapped","headerValue","transformData","fns","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","reject","ERR_BAD_REQUEST","progressEventReducer","listener","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","min","bytes","timestamps","firstSampleTS","head","tail","chunkLength","now","Date","startedAt","bytesCount","passed","round","lastArgs","timer","timestamp","threshold","args","clearTimeout","loaded","total","lengthComputable","progressBytes","rate","progress","estimated","event","progressEventDecorator","throttled","asyncDecorator","isMSIE","URL","protocol","host","port","write","expires","domain","secure","toGMTString","read","RegExp","decodeURIComponent","remove","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","cancelToken","socketPath","responseEncoding","configValue","newConfig","auth","btoa","username","password","unescape","isURLSameOrigin","xsrfValue","cookies","XMLHttpRequest","_config","resolveConfig","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","removeEventListener","onloadend","responseHeaders","getAllResponseHeaders","err","responseText","statusText","open","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","upload","cancel","abort","subscribe","aborted","parseProtocol","send","signals","controller","AbortController","reason","streamChunk","chunk","chunkSize","byteLength","end","pos","trackStream","stream","onProgress","onFinish","iterable","reader","getReader","readStream","readBytes","_onFinish","ReadableStream","pull","close","loadedBytes","enqueue","return","highWaterMark","isFetchSupported","fetch","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","supportsResponseStream","resolvers","res","_","ERR_NOT_SUPPORT","knownAdapters","http","xhr","fetchOptions","composedSignal","toAbortSignal","requestContentLength","getContentLength","_request","getBodyLength","resolveBodyLength","contentTypeHeader","flush","isCredentialsSupported","credentials","isStreamResponse","responseContentLength","responseData","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","state","throwIfCancellationRequested","throwIfRequested","dispatchRequest","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","configOrUrl","dummy","boolean","function","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","responseInterceptorChain","promise","chain","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","splice","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","defaultConfig","instance","VERSION","toFormData","Cancel","all","promises","spread","callback","isAxiosError","payload","formToJSON","getAdapter","default","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","HEALTHY","isNodeJSEnvironment","versions","ApiCall","configuration","numRetriesPerRequest","additionalUserHeaders","initializeMetadataForNodes","currentNodeIndex","_get","_callee","endpoint","queryParameters","_ref$abortSignal","abortSignal","_ref$responseType","_args","_context","performRequest","_x","_delete2","_callee2","_args2","_context2","_x2","_post","_callee3","bodyParameters","_args3","_context3","_x3","_put","_callee4","_args4","_context4","_x4","_patch","_callee5","_args5","_context5","_x5","_performRequest","_callee6","requestType","_ref2","_ref2$queryParameters","_ref2$bodyParameters","_ref2$additionalHeade","_ref2$abortSignal","_ref2$responseType","_ref2$skipConnectionT","skipConnectionTimeout","_ref2$enableKeepAlive","enableKeepAlive","requestNumber","lastException","wasAborted","_loop","_ret","numTries","_context7","abortListener","requestOptions","_response$data","_response$data2","_error$code","_error$response","_context6","getNextNode","uriFor","defaultHeaders","Infinity","transformedData","startsWith","HTTPAgent","keepAlive","HTTPSAgent","setNodeHealthcheck","customErrorForResponse","t0","_x6","_x7","_x8","isHealthy","nodeDueForHealthcheck","candidateNode","isDueForHealthcheck","lastAccessTimestamp","_timer","_callee7","seconds","_context8","_x9","messageFromServer","errorMessage","RESOURCEPATH","Collections","apiCall","_create","post","_retrieve","ImportError","importResults","_arrayLikeToArray","_unsupportedIterableToArray","_toConsumableArray","RequestWithCache","responseCache","responsePromiseCache","_perform","requestContext","requestFunction","requestFunctionArguments","cacheOptions","_cacheOptions$cacheRe","cacheResponseForSeconds","_cacheOptions$maxSize","maxSize","requestFunctionArgumentsJSON","cacheEntry","cachePromiseEntry","responsePromise","oldestEntry","_oldestEntry","requestTimestamp","delete","hasNoArrayValues","arrayableParams","normalizeArrayableParams","SearchOnlyDocuments","collectionName","requestWithCache","clearCache","_search","searchParameters","_ref$cacheSearchResul","additionalQueryParams","normalizedParams","queryParams","perform","endpointPath","operation","query_by","query_by_weights","facet_by","group_by","include_fields","exclude_fields","highlight_fields","highlight_full_fields","pinned_hits","hidden_hits","infix","override_tags","num_typos","prefix","sort_by","Documents","_upsert","action","_update","patch","query","_createMany","documents","import","_import2","documentsInJSONLFormat","resultsInJSONLFormat","resultsInJSONFormat","failedItems","_args6","RangeError","includes","success","successCount","_importStream","readableStream","_args7","_export2","_callee8","_args8","_exportStream","_callee9","_args9","_context9","Overrides","overrideId","put","Override","Synonyms","synonymId","Synonym","Document","documentId","partialDocument","Collection","_documents","_overrides","_synonyms","_exists","retrieve","individualDocuments","individualOverrides","individualSynonyms","Aliases","mapping","aliasName","Alias","Keys","searchKey","parameters","paramsJSON","digest","createHmac","update","keyPrefix","substr","rawScopedKey","Key","Debug","Metrics","Health","Operations","operationName","MultiSearch","useTextContentType","searchRequests","commonParams","normalizedSearchRequests","normalizedQueryParams","searches","Presets","presetId","_normalizedParams","search","Preset","AnalyticsRules","AnalyticsRule","AnalyticsEvents","Analytics","_analyticsRules","_analyticsEvents","individualAnalyticsRules","Stopwords","stopwordId","Stopword","ConversationModels","ConversationModel","Conversations","_conversationsModels","individualConversationModels","Conversation","Client","_options$sendApiKeyAs","metrics","stats","Stats","health","operations","multiSearch","_collections","individualCollections","_aliases","individualAliases","_keys","individualKeys","_presets","individualPresets","_stopwords","individualStopwords","analytics","_conversations","individualConversations","SearchOnlyCollection","SearchClient","Errors"],"sourceRoot":""} \ No newline at end of file diff --git a/lib/Typesense.d.ts b/lib/Typesense.d.ts deleted file mode 100644 index 3cdd44e6..00000000 --- a/lib/Typesense.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Client from "./Typesense/Client"; -import SearchClient from "./Typesense/SearchClient"; -import * as Errors from "./Typesense/Errors"; -export { Client, SearchClient, Errors }; -declare const _default: { - Client: typeof Client; - SearchClient: typeof SearchClient; - Errors: typeof Errors; -}; -export default _default; diff --git a/lib/Typesense.js b/lib/Typesense.js deleted file mode 100644 index 22556ae5..00000000 --- a/lib/Typesense.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Errors = exports.SearchClient = exports.Client = void 0; -var tslib_1 = require("tslib"); -var Client_1 = tslib_1.__importDefault(require("./Typesense/Client")); -exports.Client = Client_1.default; -var SearchClient_1 = tslib_1.__importDefault(require("./Typesense/SearchClient")); -exports.SearchClient = SearchClient_1.default; -var Errors = tslib_1.__importStar(require("./Typesense/Errors")); -exports.Errors = Errors; -exports.default = { Client: Client_1.default, SearchClient: SearchClient_1.default, Errors: Errors }; -//# sourceMappingURL=Typesense.js.map \ No newline at end of file diff --git a/lib/Typesense.js.map b/lib/Typesense.js.map deleted file mode 100644 index 10f3e223..00000000 --- a/lib/Typesense.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Typesense.js","sourceRoot":"","sources":["../src/Typesense.ts"],"names":[],"mappings":";;;;AAAA,sEAAwC;AAI/B,iBAJF,gBAAM,CAIE;AAHf,kFAAoD;AAGnC,uBAHV,sBAAY,CAGU;AAF7B,iEAA6C;AAEd,wBAAM;AACrC,kBAAe,EAAE,MAAM,kBAAA,EAAE,YAAY,wBAAA,EAAE,MAAM,QAAA,EAAE,CAAC"} \ No newline at end of file diff --git a/lib/Typesense/Alias.d.ts b/lib/Typesense/Alias.d.ts deleted file mode 100644 index 6e36a7d3..00000000 --- a/lib/Typesense/Alias.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { CollectionAliasSchema } from "./Aliases"; -import ApiCall from "./ApiCall"; -export default class Alias { - private name; - private apiCall; - constructor(name: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} diff --git a/lib/Typesense/Alias.js b/lib/Typesense/Alias.js deleted file mode 100644 index 08cb130a..00000000 --- a/lib/Typesense/Alias.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Aliases_1 = tslib_1.__importDefault(require("./Aliases")); -var Alias = /** @class */ (function () { - function Alias(name, apiCall) { - this.name = name; - this.apiCall = apiCall; - } - Alias.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Alias.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Alias.prototype.endpointPath = function () { - return "".concat(Aliases_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.name)); - }; - return Alias; -}()); -exports.default = Alias; -//# sourceMappingURL=Alias.js.map \ No newline at end of file diff --git a/lib/Typesense/Alias.js.map b/lib/Typesense/Alias.js.map deleted file mode 100644 index 03fa9442..00000000 --- a/lib/Typesense/Alias.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Alias.js","sourceRoot":"","sources":["../../src/Typesense/Alias.ts"],"names":[],"mappings":";;;AAAA,8DAA2D;AAG3D;IACE,eAAoB,IAAY,EAAU,OAAgB;QAAtC,SAAI,GAAJ,IAAI,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExD,wBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACrE;IAEK,sBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAwB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACxE;IAEO,4BAAY,GAApB;QACE,OAAO,UAAG,iBAAO,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC;IACpE,CAAC;IACH,YAAC;AAAD,CAAC,AAdD,IAcC"} \ No newline at end of file diff --git a/lib/Typesense/Aliases.d.ts b/lib/Typesense/Aliases.d.ts deleted file mode 100644 index aad02136..00000000 --- a/lib/Typesense/Aliases.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import ApiCall from "./ApiCall"; -export interface CollectionAliasCreateSchema { - collection_name: string; -} -export interface CollectionAliasSchema extends CollectionAliasCreateSchema { - name: string; -} -export interface CollectionAliasesResponseSchema { - aliases: CollectionAliasSchema[]; -} -export default class Aliases { - private apiCall; - constructor(apiCall: ApiCall); - upsert(name: string, mapping: CollectionAliasCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/Aliases.js b/lib/Typesense/Aliases.js deleted file mode 100644 index ac647bc9..00000000 --- a/lib/Typesense/Aliases.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/aliases"; -var Aliases = /** @class */ (function () { - function Aliases(apiCall) { - this.apiCall = apiCall; - } - Aliases.prototype.upsert = function (name, mapping) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(name), mapping)]; - }); - }); - }; - Aliases.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - Aliases.prototype.endpointPath = function (aliasName) { - return "".concat(Aliases.RESOURCEPATH, "/").concat(encodeURIComponent(aliasName)); - }; - Object.defineProperty(Aliases, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Aliases; -}()); -exports.default = Aliases; -//# sourceMappingURL=Aliases.js.map \ No newline at end of file diff --git a/lib/Typesense/Aliases.js.map b/lib/Typesense/Aliases.js.map deleted file mode 100644 index 9b3a301a..00000000 --- a/lib/Typesense/Aliases.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Aliases.js","sourceRoot":"","sources":["../../src/Typesense/Aliases.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,UAAU,CAAC;AAchC;IACE,iBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,wBAAM,GAAZ,UACE,IAAY,EACZ,OAAoC;;;gBAEpC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EACvB,OAAO,CACR,EAAC;;;KACH;IAEK,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAkC,YAAY,CAAC,EAAC;;;KACxE;IAEO,8BAAY,GAApB,UAAqB,SAAS;QAC5B,OAAO,UAAG,OAAO,CAAC,YAAY,cAAI,kBAAkB,CAAC,SAAS,CAAC,CAAE,CAAC;IACpE,CAAC;IAED,sBAAW,uBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,cAAC;AAAD,CAAC,AAxBD,IAwBC"} \ No newline at end of file diff --git a/lib/Typesense/Analytics.d.ts b/lib/Typesense/Analytics.d.ts deleted file mode 100644 index 14c1fc56..00000000 --- a/lib/Typesense/Analytics.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import ApiCall from "./ApiCall"; -import AnalyticsRules from "./AnalyticsRules"; -import AnalyticsRule from "./AnalyticsRule"; -import AnalyticsEvents from "./AnalyticsEvents"; -export default class Analytics { - private readonly apiCall; - private readonly _analyticsRules; - private readonly individualAnalyticsRules; - private readonly _analyticsEvents; - constructor(apiCall: ApiCall); - rules(): AnalyticsRules; - rules(id: string): AnalyticsRule; - events(): AnalyticsEvents; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/Analytics.js b/lib/Typesense/Analytics.js deleted file mode 100644 index 620f3bfb..00000000 --- a/lib/Typesense/Analytics.js +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var AnalyticsRules_1 = tslib_1.__importDefault(require("./AnalyticsRules")); -var AnalyticsRule_1 = tslib_1.__importDefault(require("./AnalyticsRule")); -var AnalyticsEvents_1 = tslib_1.__importDefault(require("./AnalyticsEvents")); -var RESOURCEPATH = "/analytics"; -var Analytics = /** @class */ (function () { - function Analytics(apiCall) { - this.apiCall = apiCall; - this.individualAnalyticsRules = {}; - this.apiCall = apiCall; - this._analyticsRules = new AnalyticsRules_1.default(this.apiCall); - this._analyticsEvents = new AnalyticsEvents_1.default(this.apiCall); - } - Analytics.prototype.rules = function (id) { - if (id === undefined) { - return this._analyticsRules; - } - else { - if (this.individualAnalyticsRules[id] === undefined) { - this.individualAnalyticsRules[id] = new AnalyticsRule_1.default(id, this.apiCall); - } - return this.individualAnalyticsRules[id]; - } - }; - Analytics.prototype.events = function () { - return this._analyticsEvents; - }; - Object.defineProperty(Analytics, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Analytics; -}()); -exports.default = Analytics; -//# sourceMappingURL=Analytics.js.map \ No newline at end of file diff --git a/lib/Typesense/Analytics.js.map b/lib/Typesense/Analytics.js.map deleted file mode 100644 index dd57042d..00000000 --- a/lib/Typesense/Analytics.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Analytics.js","sourceRoot":"","sources":["../../src/Typesense/Analytics.ts"],"names":[],"mappings":";;;AACA,4EAA8C;AAC9C,0EAA4C;AAC5C,8EAAgD;AAEhD,IAAM,YAAY,GAAG,YAAY,CAAC;AAElC;IAKE,mBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAH5B,6BAAwB,GAAkC,EAAE,CAAC;QAI5E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,wBAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,GAAG,IAAI,yBAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAID,yBAAK,GAAL,UAAM,EAAW;QACf,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBACpD,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,GAAG,IAAI,uBAAa,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,0BAAM,GAAN;QACE,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,sBAAW,yBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,gBAAC;AAAD,CAAC,AA/BD,IA+BC"} \ No newline at end of file diff --git a/lib/Typesense/AnalyticsEvent.d.ts b/lib/Typesense/AnalyticsEvent.d.ts deleted file mode 100644 index 52f9905f..00000000 --- a/lib/Typesense/AnalyticsEvent.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface AnalyticsEventCreateSchema { - type: string; - name: string; - data: Record; -} diff --git a/lib/Typesense/AnalyticsEvent.js b/lib/Typesense/AnalyticsEvent.js deleted file mode 100644 index 6c827326..00000000 --- a/lib/Typesense/AnalyticsEvent.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=AnalyticsEvent.js.map \ No newline at end of file diff --git a/lib/Typesense/AnalyticsEvent.js.map b/lib/Typesense/AnalyticsEvent.js.map deleted file mode 100644 index df36680c..00000000 --- a/lib/Typesense/AnalyticsEvent.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"AnalyticsEvent.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsEvent.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/lib/Typesense/AnalyticsEvents.d.ts b/lib/Typesense/AnalyticsEvents.d.ts deleted file mode 100644 index 98157081..00000000 --- a/lib/Typesense/AnalyticsEvents.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import ApiCall from "./ApiCall"; -import { AnalyticsEventCreateSchema } from "./AnalyticsEvent"; -export default class AnalyticsEvents { - private readonly apiCall; - constructor(apiCall: ApiCall); - create(params: AnalyticsEventCreateSchema): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/AnalyticsEvents.js b/lib/Typesense/AnalyticsEvents.js deleted file mode 100644 index 9f8691a7..00000000 --- a/lib/Typesense/AnalyticsEvents.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/analytics/events"; -var AnalyticsEvents = /** @class */ (function () { - function AnalyticsEvents(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - AnalyticsEvents.prototype.create = function (params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.post(this.endpointPath(), params)]; - }); - }); - }; - AnalyticsEvents.prototype.endpointPath = function (operation) { - return "".concat(AnalyticsEvents.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(AnalyticsEvents, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return AnalyticsEvents; -}()); -exports.default = AnalyticsEvents; -//# sourceMappingURL=AnalyticsEvents.js.map \ No newline at end of file diff --git a/lib/Typesense/AnalyticsEvents.js.map b/lib/Typesense/AnalyticsEvents.js.map deleted file mode 100644 index 12348751..00000000 --- a/lib/Typesense/AnalyticsEvents.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"AnalyticsEvents.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsEvents.ts"],"names":[],"mappings":";;;AAGA,IAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC;IACE,yBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,gCAAM,GAAZ,UACE,MAAkC;;;gBAElC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,EAAC;;;KACH;IAEO,sCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,eAAe,CAAC,YAAY,SACpC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,+BAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,sBAAC;AAAD,CAAC,AAvBD,IAuBC"} \ No newline at end of file diff --git a/lib/Typesense/AnalyticsRule.d.ts b/lib/Typesense/AnalyticsRule.d.ts deleted file mode 100644 index 2388ba9d..00000000 --- a/lib/Typesense/AnalyticsRule.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import ApiCall from "./ApiCall"; -export interface AnalyticsRuleCreateSchema { - type: "popular_queries" | "nohits_queries" | "counter"; - params: { - enable_auto_aggregation?: boolean; - source: { - collections: string[]; - events?: Array<{ - type: string; - weight: number; - name: string; - }>; - }; - expand_query?: boolean; - destination: { - collection: string; - counter_field?: string; - }; - limit?: number; - }; -} -export interface AnalyticsRuleDeleteSchema { - name: string; -} -export interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema { - name: string; -} -export default class AnalyticsRule { - private name; - private apiCall; - constructor(name: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} diff --git a/lib/Typesense/AnalyticsRule.js b/lib/Typesense/AnalyticsRule.js deleted file mode 100644 index 7155fe00..00000000 --- a/lib/Typesense/AnalyticsRule.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var AnalyticsRules_1 = tslib_1.__importDefault(require("./AnalyticsRules")); -var AnalyticsRule = /** @class */ (function () { - function AnalyticsRule(name, apiCall) { - this.name = name; - this.apiCall = apiCall; - } - AnalyticsRule.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - AnalyticsRule.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - AnalyticsRule.prototype.endpointPath = function () { - return "".concat(AnalyticsRules_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.name)); - }; - return AnalyticsRule; -}()); -exports.default = AnalyticsRule; -//# sourceMappingURL=AnalyticsRule.js.map \ No newline at end of file diff --git a/lib/Typesense/AnalyticsRule.js.map b/lib/Typesense/AnalyticsRule.js.map deleted file mode 100644 index 215fe372..00000000 --- a/lib/Typesense/AnalyticsRule.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"AnalyticsRule.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsRule.ts"],"names":[],"mappings":";;;AACA,4EAA8C;AA+B9C;IACE,uBACU,IAAY,EACZ,OAAgB;QADhB,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,gCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAsB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACnE;IAEK,8BAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAA4B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC5E;IAEO,oCAAY,GAApB;QACE,OAAO,UAAG,wBAAc,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC;IAC3E,CAAC;IACH,oBAAC;AAAD,CAAC,AAjBD,IAiBC"} \ No newline at end of file diff --git a/lib/Typesense/AnalyticsRules.d.ts b/lib/Typesense/AnalyticsRules.d.ts deleted file mode 100644 index 5ac34f01..00000000 --- a/lib/Typesense/AnalyticsRules.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import ApiCall from "./ApiCall"; -import { AnalyticsRuleCreateSchema, AnalyticsRuleSchema } from "./AnalyticsRule"; -export interface AnalyticsRulesRetrieveSchema { - rules: AnalyticsRuleSchema[]; -} -export default class AnalyticsRules { - private readonly apiCall; - constructor(apiCall: ApiCall); - upsert(name: string, params: AnalyticsRuleCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/AnalyticsRules.js b/lib/Typesense/AnalyticsRules.js deleted file mode 100644 index a4d8b9d4..00000000 --- a/lib/Typesense/AnalyticsRules.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/analytics/rules"; -var AnalyticsRules = /** @class */ (function () { - function AnalyticsRules(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - AnalyticsRules.prototype.upsert = function (name, params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(name), params)]; - }); - }); - }; - AnalyticsRules.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - AnalyticsRules.prototype.endpointPath = function (operation) { - return "".concat(AnalyticsRules.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(AnalyticsRules, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return AnalyticsRules; -}()); -exports.default = AnalyticsRules; -//# sourceMappingURL=AnalyticsRules.js.map \ No newline at end of file diff --git a/lib/Typesense/AnalyticsRules.js.map b/lib/Typesense/AnalyticsRules.js.map deleted file mode 100644 index b18a8b68..00000000 --- a/lib/Typesense/AnalyticsRules.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"AnalyticsRules.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsRules.ts"],"names":[],"mappings":";;;AAUA,IAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC;IACE,wBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,+BAAM,GAAZ,UACE,IAAY,EACZ,MAAiC;;;gBAEjC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EACvB,MAAM,CACP,EAAC;;;KACH;IAEK,iCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA+B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC5E;IAEO,qCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,cAAc,CAAC,YAAY,SACnC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,8BAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,qBAAC;AAAD,CAAC,AA5BD,IA4BC"} \ No newline at end of file diff --git a/lib/Typesense/ApiCall.d.ts b/lib/Typesense/ApiCall.d.ts deleted file mode 100644 index dd7370e6..00000000 --- a/lib/Typesense/ApiCall.d.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { AxiosRequestConfig, AxiosResponse, Method } from "axios"; -import Configuration, { NodeConfiguration } from "./Configuration"; -import TypesenseError from "./Errors/TypesenseError"; -interface Node extends NodeConfiguration { - isHealthy: boolean; - index: string | number; -} -export default class ApiCall { - private configuration; - private readonly apiKey; - private readonly nodes; - private readonly nearestNode; - private readonly connectionTimeoutSeconds; - private readonly healthcheckIntervalSeconds; - private readonly retryIntervalSeconds; - private readonly sendApiKeyAsQueryParam?; - private readonly numRetriesPerRequest; - private readonly additionalUserHeaders?; - private readonly logger; - private currentNodeIndex; - constructor(configuration: Configuration); - get(endpoint: string, queryParameters?: any, { abortSignal, responseType, }?: { - abortSignal?: any; - responseType?: AxiosRequestConfig["responseType"] | undefined; - }): Promise; - delete(endpoint: string, queryParameters?: any): Promise; - post(endpoint: string, bodyParameters?: any, queryParameters?: any, additionalHeaders?: any): Promise; - put(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; - patch(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; - private getAdapter; - performRequest(requestType: Method, endpoint: string, { queryParameters, bodyParameters, additionalHeaders, abortSignal, responseType, skipConnectionTimeout, enableKeepAlive, }: { - queryParameters?: any; - bodyParameters?: any; - additionalHeaders?: any; - abortSignal?: any; - responseType?: AxiosRequestConfig["responseType"] | undefined; - skipConnectionTimeout?: boolean; - enableKeepAlive?: boolean | undefined; - }): Promise; - getNextNode(requestNumber?: number): Node; - nodeDueForHealthcheck(node: any, requestNumber?: number): boolean; - initializeMetadataForNodes(): void; - setNodeHealthcheck(node: any, isHealthy: any): void; - uriFor(endpoint: string, node: any): string; - defaultHeaders(): any; - timer(seconds: any): Promise; - customErrorForResponse(response: AxiosResponse, messageFromServer: string, httpBody?: string): TypesenseError; -} -export {}; diff --git a/lib/Typesense/ApiCall.js b/lib/Typesense/ApiCall.js deleted file mode 100644 index 248828d3..00000000 --- a/lib/Typesense/ApiCall.js +++ /dev/null @@ -1,406 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var axios_1 = tslib_1.__importDefault(require("axios")); -var http_1 = require("http"); -var https_1 = require("https"); -var Errors_1 = require("./Errors"); -var TypesenseError_1 = tslib_1.__importDefault(require("./Errors/TypesenseError")); -var APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; -var HEALTHY = true; -var UNHEALTHY = false; -var isNodeJSEnvironment = typeof process !== "undefined" && - process.versions != null && - process.versions.node != null; -var ApiCall = /** @class */ (function () { - function ApiCall(configuration) { - this.configuration = configuration; - this.apiKey = this.configuration.apiKey; - this.nodes = - this.configuration.nodes == null - ? this.configuration.nodes - : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes - this.nearestNode = - this.configuration.nearestNode == null - ? this.configuration.nearestNode - : JSON.parse(JSON.stringify(this.configuration.nearestNode)); - this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds; - this.healthcheckIntervalSeconds = - this.configuration.healthcheckIntervalSeconds; - this.numRetriesPerRequest = this.configuration.numRetries; - this.retryIntervalSeconds = this.configuration.retryIntervalSeconds; - this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam; - this.additionalUserHeaders = this.configuration.additionalHeaders; - this.logger = this.configuration.logger; - this.initializeMetadataForNodes(); - this.currentNodeIndex = -1; - } - ApiCall.prototype.get = function (endpoint_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, queryParameters, _a) { - if (queryParameters === void 0) { queryParameters = {}; } - var _b = _a === void 0 ? {} : _a, _c = _b.abortSignal, abortSignal = _c === void 0 ? null : _c, _d = _b.responseType, responseType = _d === void 0 ? undefined : _d; - return tslib_1.__generator(this, function (_e) { - return [2 /*return*/, this.performRequest("get", endpoint, { - queryParameters: queryParameters, - abortSignal: abortSignal, - responseType: responseType, - })]; - }); - }); - }; - ApiCall.prototype.delete = function (endpoint_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, queryParameters) { - if (queryParameters === void 0) { queryParameters = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.performRequest("delete", endpoint, { queryParameters: queryParameters })]; - }); - }); - }; - ApiCall.prototype.post = function (endpoint_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, bodyParameters, queryParameters, additionalHeaders) { - if (bodyParameters === void 0) { bodyParameters = {}; } - if (queryParameters === void 0) { queryParameters = {}; } - if (additionalHeaders === void 0) { additionalHeaders = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.performRequest("post", endpoint, { - queryParameters: queryParameters, - bodyParameters: bodyParameters, - additionalHeaders: additionalHeaders, - })]; - }); - }); - }; - ApiCall.prototype.put = function (endpoint_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, bodyParameters, queryParameters) { - if (bodyParameters === void 0) { bodyParameters = {}; } - if (queryParameters === void 0) { queryParameters = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.performRequest("put", endpoint, { - queryParameters: queryParameters, - bodyParameters: bodyParameters, - })]; - }); - }); - }; - ApiCall.prototype.patch = function (endpoint_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, bodyParameters, queryParameters) { - if (bodyParameters === void 0) { bodyParameters = {}; } - if (queryParameters === void 0) { queryParameters = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.performRequest("patch", endpoint, { - queryParameters: queryParameters, - bodyParameters: bodyParameters, - })]; - }); - }); - }; - ApiCall.prototype.getAdapter = function () { - if (!this.configuration.axiosAdapter) - return undefined; - if (typeof this.configuration.axiosAdapter === "function") - return this.configuration.axiosAdapter; - var isCloudflareWorkers = typeof navigator !== "undefined" && - navigator.userAgent === "Cloudflare-Workers"; - return isCloudflareWorkers - ? axios_1.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis) - : axios_1.default.getAdapter(this.configuration.axiosAdapter); - }; - ApiCall.prototype.performRequest = function (requestType_1, endpoint_1, _a) { - return tslib_1.__awaiter(this, arguments, void 0, function (requestType, endpoint, _b) { - var requestNumber, lastException, wasAborted, _loop_1, this_1, numTries, state_1; - var _c, _d, _e, _f; - var _g = _b.queryParameters, queryParameters = _g === void 0 ? null : _g, _h = _b.bodyParameters, bodyParameters = _h === void 0 ? null : _h, _j = _b.additionalHeaders, additionalHeaders = _j === void 0 ? {} : _j, _k = _b.abortSignal, abortSignal = _k === void 0 ? null : _k, _l = _b.responseType, responseType = _l === void 0 ? undefined : _l, _m = _b.skipConnectionTimeout, skipConnectionTimeout = _m === void 0 ? false : _m, _o = _b.enableKeepAlive, enableKeepAlive = _o === void 0 ? undefined : _o; - return tslib_1.__generator(this, function (_p) { - switch (_p.label) { - case 0: - this.configuration.validate(); - requestNumber = Date.now(); - wasAborted = false; - this.logger.debug("Request #".concat(requestNumber, ": Performing ").concat(requestType.toUpperCase(), " request: ").concat(endpoint)); - _loop_1 = function (numTries) { - var node, abortListener, requestOptions, cancelToken, source_1, response, error_1; - return tslib_1.__generator(this, function (_q) { - switch (_q.label) { - case 0: - node = this_1.getNextNode(requestNumber); - this_1.logger.debug("Request #".concat(requestNumber, ": Attempting ").concat(requestType.toUpperCase(), " request Try #").concat(numTries, " to Node ").concat(node.index)); - if (abortSignal && abortSignal.aborted) { - return [2 /*return*/, { value: Promise.reject(new Error("Request aborted by caller.")) }]; - } - abortListener = void 0; - _q.label = 1; - case 1: - _q.trys.push([1, 3, 5, 6]); - requestOptions = { - adapter: this_1.getAdapter(), - method: requestType, - url: this_1.uriFor(endpoint, node), - headers: Object.assign({}, this_1.defaultHeaders(), additionalHeaders, this_1.additionalUserHeaders), - maxContentLength: Infinity, - maxBodyLength: Infinity, - responseType: responseType, - validateStatus: function (status) { - /* Override default validateStatus, which only considers 2xx a success. - In our case, if the server returns any HTTP code, we will handle it below. - We do this to be able to raise custom errors based on response code. - */ - return status > 0; - }, - transformResponse: [ - function (data, headers) { - var transformedData = data; - if (headers !== undefined && - typeof data === "string" && - headers["content-type"] && - headers["content-type"].startsWith("application/json")) { - transformedData = JSON.parse(data); - } - return transformedData; - }, - ], - }; - if (skipConnectionTimeout !== true) { - requestOptions.timeout = this_1.connectionTimeoutSeconds * 1000; - } - if (queryParameters && Object.keys(queryParameters).length !== 0) { - requestOptions.params = queryParameters; - } - if (this_1.sendApiKeyAsQueryParam) { - requestOptions.params = requestOptions.params || {}; - requestOptions.params["x-typesense-api-key"] = this_1.apiKey; - } - if (this_1.configuration.httpAgent) { - this_1.logger.debug("Request #".concat(requestNumber, ": Using custom httpAgent")); - requestOptions.httpAgent = this_1.configuration.httpAgent; - } - else if (enableKeepAlive === true) { - if (!isNodeJSEnvironment) { - this_1.logger.warn("Request #".concat(requestNumber, ": Cannot use custom httpAgent in a browser environment to enable keepAlive")); - } - else { - this_1.logger.debug("Request #".concat(requestNumber, ": Enabling KeepAlive")); - requestOptions.httpAgent = new http_1.Agent({ keepAlive: true }); - } - } - if (this_1.configuration.httpsAgent) { - this_1.logger.debug("Request #".concat(requestNumber, ": Using custom httpsAgent")); - requestOptions.httpsAgent = this_1.configuration.httpsAgent; - } - else if (enableKeepAlive === true) { - if (!isNodeJSEnvironment) { - this_1.logger.warn("Request #".concat(requestNumber, ": Cannot use custom httpAgent in a browser environment to enable keepAlive")); - } - else { - this_1.logger.debug("Request #".concat(requestNumber, ": Enabling keepAlive")); - requestOptions.httpsAgent = new https_1.Agent({ keepAlive: true }); - } - } - if (this_1.configuration.paramsSerializer) { - this_1.logger.debug("Request #".concat(requestNumber, ": Using custom paramsSerializer")); - requestOptions.paramsSerializer = this_1.configuration.paramsSerializer; - } - if (bodyParameters && - ((typeof bodyParameters === "string" && - bodyParameters.length !== 0) || - (typeof bodyParameters === "object" && - Object.keys(bodyParameters).length !== 0))) { - requestOptions.data = bodyParameters; - } - // Translate from user-provided AbortController to the Axios request cancel mechanism. - if (abortSignal) { - cancelToken = axios_1.default.CancelToken; - source_1 = cancelToken.source(); - abortListener = function () { - wasAborted = true; - source_1.cancel(); - }; - abortSignal.addEventListener("abort", abortListener); - requestOptions.cancelToken = source_1.token; - } - return [4 /*yield*/, (0, axios_1.default)(requestOptions)]; - case 2: - response = _q.sent(); - if (response.status >= 1 && response.status <= 499) { - // Treat any status code > 0 and < 500 to be an indication that node is healthy - // We exclude 0 since some clients return 0 when request fails - this_1.setNodeHealthcheck(node, HEALTHY); - } - this_1.logger.debug("Request #".concat(requestNumber, ": Request to Node ").concat(node.index, " was made. Response Code was ").concat(response.status, ".")); - if (response.status >= 200 && response.status < 300) { - return [2 /*return*/, { value: Promise.resolve(response.data) }]; - } - else if (response.status < 500) { - return [2 /*return*/, { value: Promise.reject(this_1.customErrorForResponse(response, (_c = response.data) === null || _c === void 0 ? void 0 : _c.message, requestOptions.data)) }]; - } - else { - // Retry all other HTTP errors (HTTPStatus > 500) - // This will get caught by the catch block below - throw this_1.customErrorForResponse(response, (_d = response.data) === null || _d === void 0 ? void 0 : _d.message, requestOptions.data); - } - return [3 /*break*/, 6]; - case 3: - error_1 = _q.sent(); - // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts - if (!wasAborted) { - this_1.setNodeHealthcheck(node, UNHEALTHY); - } - lastException = error_1; - this_1.logger.warn("Request #".concat(requestNumber, ": Request to Node ").concat(node.index, " failed due to \"").concat((_e = error_1 === null || error_1 === void 0 ? void 0 : error_1.code) !== null && _e !== void 0 ? _e : "", " ").concat(error_1.message).concat(error_1.response == null - ? "" - : " - " + JSON.stringify((_f = error_1.response) === null || _f === void 0 ? void 0 : _f.data), "\"")); - // this.logger.debug(error.stack) - if (wasAborted) { - return [2 /*return*/, { value: Promise.reject(new Error("Request aborted by caller.")) }]; - } - if (numTries < this_1.numRetriesPerRequest + 1) { - this_1.logger.warn("Request #".concat(requestNumber, ": Sleeping for ").concat(this_1.retryIntervalSeconds, "s and then retrying request...")); - } - return [4 /*yield*/, this_1.timer(this_1.retryIntervalSeconds)]; - case 4: - _q.sent(); - return [3 /*break*/, 6]; - case 5: - if (abortSignal && abortListener) { - abortSignal.removeEventListener("abort", abortListener); - } - return [7 /*endfinally*/]; - case 6: return [2 /*return*/]; - } - }); - }; - this_1 = this; - numTries = 1; - _p.label = 1; - case 1: - if (!(numTries <= this.numRetriesPerRequest + 1)) return [3 /*break*/, 4]; - return [5 /*yield**/, _loop_1(numTries)]; - case 2: - state_1 = _p.sent(); - if (typeof state_1 === "object") - return [2 /*return*/, state_1.value]; - _p.label = 3; - case 3: - numTries++; - return [3 /*break*/, 1]; - case 4: - this.logger.debug("Request #".concat(requestNumber, ": No retries left. Raising last error")); - return [2 /*return*/, Promise.reject(lastException)]; - } - }); - }); - }; - // Attempts to find the next healthy node, looping through the list of nodes once. - // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy - // so we can try the request for good measure, in case that node has become healthy since - ApiCall.prototype.getNextNode = function (requestNumber) { - if (requestNumber === void 0) { requestNumber = 0; } - // Check if nearestNode is set and is healthy, if so return it - if (this.nearestNode != null) { - this.logger.debug("Request #".concat(requestNumber, ": Nodes Health: Node ").concat(this.nearestNode.index, " is ").concat(this.nearestNode.isHealthy === true ? "Healthy" : "Unhealthy")); - if (this.nearestNode.isHealthy === true || - this.nodeDueForHealthcheck(this.nearestNode, requestNumber)) { - this.logger.debug("Request #".concat(requestNumber, ": Updated current node to Node ").concat(this.nearestNode.index)); - return this.nearestNode; - } - this.logger.debug("Request #".concat(requestNumber, ": Falling back to individual nodes")); - } - // Fallback to nodes as usual - this.logger.debug("Request #".concat(requestNumber, ": Nodes Health: ").concat(this.nodes - .map(function (node) { - return "Node ".concat(node.index, " is ").concat(node.isHealthy === true ? "Healthy" : "Unhealthy"); - }) - .join(" || "))); - var candidateNode = this.nodes[0]; - for (var i = 0; i <= this.nodes.length; i++) { - this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length; - candidateNode = this.nodes[this.currentNodeIndex]; - if (candidateNode.isHealthy === true || - this.nodeDueForHealthcheck(candidateNode, requestNumber)) { - this.logger.debug("Request #".concat(requestNumber, ": Updated current node to Node ").concat(candidateNode.index)); - return candidateNode; - } - } - // None of the nodes are marked healthy, but some of them could have become healthy since last health check. - // So we will just return the next node. - this.logger.debug("Request #".concat(requestNumber, ": No healthy nodes were found. Returning the next node, Node ").concat(candidateNode.index)); - return candidateNode; - }; - ApiCall.prototype.nodeDueForHealthcheck = function (node, requestNumber) { - if (requestNumber === void 0) { requestNumber = 0; } - var isDueForHealthcheck = Date.now() - node.lastAccessTimestamp > - this.healthcheckIntervalSeconds * 1000; - if (isDueForHealthcheck) { - this.logger.debug("Request #".concat(requestNumber, ": Node ").concat(node.index, " has exceeded healtcheckIntervalSeconds of ").concat(this.healthcheckIntervalSeconds, ". Adding it back into rotation.")); - } - return isDueForHealthcheck; - }; - ApiCall.prototype.initializeMetadataForNodes = function () { - var _this = this; - if (this.nearestNode != null) { - this.nearestNode.index = "nearestNode"; - this.setNodeHealthcheck(this.nearestNode, HEALTHY); - } - this.nodes.forEach(function (node, i) { - node.index = i; - _this.setNodeHealthcheck(node, HEALTHY); - }); - }; - ApiCall.prototype.setNodeHealthcheck = function (node, isHealthy) { - node.isHealthy = isHealthy; - node.lastAccessTimestamp = Date.now(); - }; - ApiCall.prototype.uriFor = function (endpoint, node) { - if (node.url != null) { - return "".concat(node.url).concat(endpoint); - } - return "".concat(node.protocol, "://").concat(node.host, ":").concat(node.port).concat(node.path).concat(endpoint); - }; - ApiCall.prototype.defaultHeaders = function () { - var defaultHeaders = {}; - if (!this.sendApiKeyAsQueryParam) { - defaultHeaders[APIKEYHEADERNAME] = this.apiKey; - } - defaultHeaders["Content-Type"] = "application/json"; - return defaultHeaders; - }; - ApiCall.prototype.timer = function (seconds) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, seconds * 1000); })]; - }); - }); - }; - ApiCall.prototype.customErrorForResponse = function (response, messageFromServer, httpBody) { - var errorMessage = "Request failed with HTTP code ".concat(response.status); - if (typeof messageFromServer === "string" && - messageFromServer.trim() !== "") { - errorMessage += " | Server said: ".concat(messageFromServer); - } - var error = new TypesenseError_1.default(errorMessage, httpBody, response.status); - if (response.status === 400) { - error = new Errors_1.RequestMalformed(errorMessage); - } - else if (response.status === 401) { - error = new Errors_1.RequestUnauthorized(errorMessage); - } - else if (response.status === 404) { - error = new Errors_1.ObjectNotFound(errorMessage); - } - else if (response.status === 409) { - error = new Errors_1.ObjectAlreadyExists(errorMessage); - } - else if (response.status === 422) { - error = new Errors_1.ObjectUnprocessable(errorMessage); - } - else if (response.status >= 500 && response.status <= 599) { - error = new Errors_1.ServerError(errorMessage); - } - else { - error = new Errors_1.HTTPError(errorMessage); - } - return error; - }; - return ApiCall; -}()); -exports.default = ApiCall; -//# sourceMappingURL=ApiCall.js.map \ No newline at end of file diff --git a/lib/Typesense/ApiCall.js.map b/lib/Typesense/ApiCall.js.map deleted file mode 100644 index 0ef7fe16..00000000 --- a/lib/Typesense/ApiCall.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ApiCall.js","sourceRoot":"","sources":["../../src/Typesense/ApiCall.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Client.d.ts b/lib/Typesense/Client.d.ts deleted file mode 100644 index 843112e1..00000000 --- a/lib/Typesense/Client.d.ts +++ /dev/null @@ -1,57 +0,0 @@ -import Configuration, { ConfigurationOptions } from "./Configuration"; -import ApiCall from "./ApiCall"; -import Collections from "./Collections"; -import Collection from "./Collection"; -import Aliases from "./Aliases"; -import Alias from "./Alias"; -import Keys from "./Keys"; -import Key from "./Key"; -import Debug from "./Debug"; -import Metrics from "./Metrics"; -import Stats from "./Stats"; -import Health from "./Health"; -import Operations from "./Operations"; -import MultiSearch from "./MultiSearch"; -import Presets from "./Presets"; -import Preset from "./Preset"; -import Analytics from "./Analytics"; -import Stopwords from "./Stopwords"; -import Stopword from "./Stopword"; -import Conversations from "./Conversations"; -import Conversation from "./Conversation"; -export default class Client { - configuration: Configuration; - apiCall: ApiCall; - debug: Debug; - metrics: Metrics; - stats: Stats; - health: Health; - operations: Operations; - multiSearch: MultiSearch; - analytics: Analytics; - private readonly _collections; - private readonly individualCollections; - private readonly _aliases; - private readonly individualAliases; - private readonly _keys; - private readonly individualKeys; - private readonly _presets; - private readonly individualPresets; - private readonly _stopwords; - private readonly individualStopwords; - private readonly _conversations; - private readonly individualConversations; - constructor(options: ConfigurationOptions); - collections(): Collections; - collections = object>(collectionName: string): Collection; - aliases(): Aliases; - aliases(aliasName: string): Alias; - keys(): Keys; - keys(id: number): Key; - presets(): Presets; - presets(id: string): Preset; - stopwords(): Stopwords; - stopwords(id: string): Stopword; - conversations(): Conversations; - conversations(id: string): Conversation; -} diff --git a/lib/Typesense/Client.js b/lib/Typesense/Client.js deleted file mode 100644 index ed6bb73c..00000000 --- a/lib/Typesense/Client.js +++ /dev/null @@ -1,121 +0,0 @@ -"use strict"; -/* eslint-disable no-dupe-class-members */ -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Configuration_1 = tslib_1.__importDefault(require("./Configuration")); -var ApiCall_1 = tslib_1.__importDefault(require("./ApiCall")); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var Collection_1 = tslib_1.__importDefault(require("./Collection")); -var Aliases_1 = tslib_1.__importDefault(require("./Aliases")); -var Alias_1 = tslib_1.__importDefault(require("./Alias")); -var Keys_1 = tslib_1.__importDefault(require("./Keys")); -var Key_1 = tslib_1.__importDefault(require("./Key")); -var Debug_1 = tslib_1.__importDefault(require("./Debug")); -var Metrics_1 = tslib_1.__importDefault(require("./Metrics")); -var Stats_1 = tslib_1.__importDefault(require("./Stats")); -var Health_1 = tslib_1.__importDefault(require("./Health")); -var Operations_1 = tslib_1.__importDefault(require("./Operations")); -var MultiSearch_1 = tslib_1.__importDefault(require("./MultiSearch")); -var Presets_1 = tslib_1.__importDefault(require("./Presets")); -var Preset_1 = tslib_1.__importDefault(require("./Preset")); -var Analytics_1 = tslib_1.__importDefault(require("./Analytics")); -var Stopwords_1 = tslib_1.__importDefault(require("./Stopwords")); -var Stopword_1 = tslib_1.__importDefault(require("./Stopword")); -var Conversations_1 = tslib_1.__importDefault(require("./Conversations")); -var Conversation_1 = tslib_1.__importDefault(require("./Conversation")); -var Client = /** @class */ (function () { - function Client(options) { - var _a; - options.sendApiKeyAsQueryParam = (_a = options.sendApiKeyAsQueryParam) !== null && _a !== void 0 ? _a : false; - this.configuration = new Configuration_1.default(options); - this.apiCall = new ApiCall_1.default(this.configuration); - this.debug = new Debug_1.default(this.apiCall); - this.metrics = new Metrics_1.default(this.apiCall); - this.stats = new Stats_1.default(this.apiCall); - this.health = new Health_1.default(this.apiCall); - this.operations = new Operations_1.default(this.apiCall); - this.multiSearch = new MultiSearch_1.default(this.apiCall, this.configuration); - this._collections = new Collections_1.default(this.apiCall); - this.individualCollections = {}; - this._aliases = new Aliases_1.default(this.apiCall); - this.individualAliases = {}; - this._keys = new Keys_1.default(this.apiCall); - this.individualKeys = {}; - this._presets = new Presets_1.default(this.apiCall); - this.individualPresets = {}; - this._stopwords = new Stopwords_1.default(this.apiCall); - this.individualStopwords = {}; - this.analytics = new Analytics_1.default(this.apiCall); - this._conversations = new Conversations_1.default(this.apiCall); - this.individualConversations = {}; - } - Client.prototype.collections = function (collectionName) { - if (collectionName === undefined) { - return this._collections; - } - else { - if (this.individualCollections[collectionName] === undefined) { - this.individualCollections[collectionName] = new Collection_1.default(collectionName, this.apiCall, this.configuration); - } - return this.individualCollections[collectionName]; - } - }; - Client.prototype.aliases = function (aliasName) { - if (aliasName === undefined) { - return this._aliases; - } - else { - if (this.individualAliases[aliasName] === undefined) { - this.individualAliases[aliasName] = new Alias_1.default(aliasName, this.apiCall); - } - return this.individualAliases[aliasName]; - } - }; - Client.prototype.keys = function (id) { - if (id === undefined) { - return this._keys; - } - else { - if (this.individualKeys[id] === undefined) { - this.individualKeys[id] = new Key_1.default(id, this.apiCall); - } - return this.individualKeys[id]; - } - }; - Client.prototype.presets = function (id) { - if (id === undefined) { - return this._presets; - } - else { - if (this.individualPresets[id] === undefined) { - this.individualPresets[id] = new Preset_1.default(id, this.apiCall); - } - return this.individualPresets[id]; - } - }; - Client.prototype.stopwords = function (id) { - if (id === undefined) { - return this._stopwords; - } - else { - if (this.individualStopwords[id] === undefined) { - this.individualStopwords[id] = new Stopword_1.default(id, this.apiCall); - } - return this.individualStopwords[id]; - } - }; - Client.prototype.conversations = function (id) { - if (id === undefined) { - return this._conversations; - } - else { - if (this.individualConversations[id] === undefined) { - this.individualConversations[id] = new Conversation_1.default(id, this.apiCall); - } - return this.individualConversations[id]; - } - }; - return Client; -}()); -exports.default = Client; -//# sourceMappingURL=Client.js.map \ No newline at end of file diff --git a/lib/Typesense/Client.js.map b/lib/Typesense/Client.js.map deleted file mode 100644 index f62fe966..00000000 --- a/lib/Typesense/Client.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../src/Typesense/Client.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Collection.d.ts b/lib/Typesense/Collection.d.ts deleted file mode 100644 index b3cb219f..00000000 --- a/lib/Typesense/Collection.d.ts +++ /dev/null @@ -1,62 +0,0 @@ -import ApiCall from "./ApiCall"; -import { CollectionCreateSchema } from "./Collections"; -import Documents, { DocumentSchema } from "./Documents"; -import Overrides from "./Overrides"; -import Override from "./Override"; -import Synonyms from "./Synonyms"; -import Synonym from "./Synonym"; -import { Document } from "./Document"; -export type FieldType = "string" | "int32" | "int64" | "float" | "bool" | "geopoint" | "geopoint[]" | "string[]" | "int32[]" | "int64[]" | "float[]" | "bool[]" | "object" | "object[]" | "auto" | "string*" | "image"; -export interface CollectionFieldSchema { - name: string; - type: FieldType; - optional?: boolean; - facet?: boolean; - index?: boolean; - sort?: boolean; - locale?: string; - infix?: boolean; - stem?: boolean; - num_dim?: number; - store?: boolean; - range_index?: boolean; - [t: string]: unknown; -} -export interface CollectionSchema extends CollectionCreateSchema { - created_at: number; - num_documents: number; - num_memory_shards: number; -} -export interface CollectionDropFieldSchema { - name: string; - drop: true; -} -export interface CollectionUpdateSchema extends Partial> { - fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[]; -} -export interface CollectionDeleteOptions { - compact_store?: boolean; -} -export default class Collection { - private readonly name; - private readonly apiCall; - private readonly configuration; - private readonly _documents; - private individualDocuments; - private readonly _overrides; - private individualOverrides; - private readonly _synonyms; - private individualSynonyms; - constructor(name: string, apiCall: ApiCall, configuration: any); - retrieve(): Promise; - update(schema: CollectionUpdateSchema): Promise; - delete(options?: CollectionDeleteOptions): Promise; - exists(): Promise; - documents(): Documents; - documents(documentId: string): Document; - overrides(): Overrides; - overrides(overrideId: string): Override; - synonyms(): Synonyms; - synonyms(synonymId: string): Synonym; - private endpointPath; -} diff --git a/lib/Typesense/Collection.js b/lib/Typesense/Collection.js deleted file mode 100644 index 92c6b063..00000000 --- a/lib/Typesense/Collection.js +++ /dev/null @@ -1,109 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var Documents_1 = tslib_1.__importDefault(require("./Documents")); -var Errors_1 = require("./Errors"); -var Overrides_1 = tslib_1.__importDefault(require("./Overrides")); -var Override_1 = tslib_1.__importDefault(require("./Override")); -var Synonyms_1 = tslib_1.__importDefault(require("./Synonyms")); -var Synonym_1 = tslib_1.__importDefault(require("./Synonym")); -var Document_1 = require("./Document"); -var Collection = /** @class */ (function () { - function Collection(name, apiCall, configuration) { - this.name = name; - this.apiCall = apiCall; - this.configuration = configuration; - this.individualDocuments = {}; - this.individualOverrides = {}; - this.individualSynonyms = {}; - this.name = name; - this.apiCall = apiCall; - this.configuration = configuration; - this._documents = new Documents_1.default(this.name, this.apiCall, this.configuration); - this._overrides = new Overrides_1.default(this.name, this.apiCall); - this._synonyms = new Synonyms_1.default(this.name, this.apiCall); - } - Collection.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Collection.prototype.update = function (schema) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.patch(this.endpointPath(), schema)]; - }); - }); - }; - Collection.prototype.delete = function () { - return tslib_1.__awaiter(this, arguments, void 0, function (options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath(), options)]; - }); - }); - }; - Collection.prototype.exists = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var e_1; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, this.retrieve()]; - case 1: - _a.sent(); - return [2 /*return*/, true]; - case 2: - e_1 = _a.sent(); - if (e_1 instanceof Errors_1.ObjectNotFound) - return [2 /*return*/, false]; - throw e_1; - case 3: return [2 /*return*/]; - } - }); - }); - }; - Collection.prototype.documents = function (documentId) { - if (!documentId) { - return this._documents; - } - else { - if (this.individualDocuments[documentId] === undefined) { - this.individualDocuments[documentId] = new Document_1.Document(this.name, documentId, this.apiCall); - } - return this.individualDocuments[documentId]; - } - }; - Collection.prototype.overrides = function (overrideId) { - if (overrideId === undefined) { - return this._overrides; - } - else { - if (this.individualOverrides[overrideId] === undefined) { - this.individualOverrides[overrideId] = new Override_1.default(this.name, overrideId, this.apiCall); - } - return this.individualOverrides[overrideId]; - } - }; - Collection.prototype.synonyms = function (synonymId) { - if (synonymId === undefined) { - return this._synonyms; - } - else { - if (this.individualSynonyms[synonymId] === undefined) { - this.individualSynonyms[synonymId] = new Synonym_1.default(this.name, synonymId, this.apiCall); - } - return this.individualSynonyms[synonymId]; - } - }; - Collection.prototype.endpointPath = function () { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.name)); - }; - return Collection; -}()); -exports.default = Collection; -//# sourceMappingURL=Collection.js.map \ No newline at end of file diff --git a/lib/Typesense/Collection.js.map b/lib/Typesense/Collection.js.map deleted file mode 100644 index c410ca33..00000000 --- a/lib/Typesense/Collection.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Collection.js","sourceRoot":"","sources":["../../src/Typesense/Collection.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Collections.d.ts b/lib/Typesense/Collections.d.ts deleted file mode 100644 index 050962bd..00000000 --- a/lib/Typesense/Collections.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ApiCall from "./ApiCall"; -import { CollectionFieldSchema, CollectionSchema } from "./Collection"; -export interface CollectionCreateSchema { - name: string; - default_sorting_field?: string; - fields?: CollectionFieldSchema[]; - symbols_to_index?: string[]; - token_separators?: string[]; - enable_nested_fields?: boolean; - metadata?: object; - voice_query_model?: { - model_name?: string; - }; -} -export interface CollectionCreateOptions { - src_name?: string; -} -export interface CollectionsRetrieveOptions { - exclude_fields?: string; -} -export default class Collections { - private apiCall; - constructor(apiCall: ApiCall); - create(schema: CollectionCreateSchema, options?: CollectionCreateOptions): Promise; - retrieve(options?: CollectionsRetrieveOptions): Promise; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/Collections.js b/lib/Typesense/Collections.js deleted file mode 100644 index 05248fe0..00000000 --- a/lib/Typesense/Collections.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/collections"; -var Collections = /** @class */ (function () { - function Collections(apiCall) { - this.apiCall = apiCall; - } - Collections.prototype.create = function (schema_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (schema, options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.post(RESOURCEPATH, schema, options)]; - }); - }); - }; - Collections.prototype.retrieve = function () { - return tslib_1.__awaiter(this, arguments, void 0, function (options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH, options)]; - }); - }); - }; - Object.defineProperty(Collections, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Collections; -}()); -exports.default = Collections; -//# sourceMappingURL=Collections.js.map \ No newline at end of file diff --git a/lib/Typesense/Collections.js.map b/lib/Typesense/Collections.js.map deleted file mode 100644 index b55b67d0..00000000 --- a/lib/Typesense/Collections.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Collections.js","sourceRoot":"","sources":["../../src/Typesense/Collections.ts"],"names":[],"mappings":";;;AAwBA,IAAM,YAAY,GAAG,cAAc,CAAC;AAEpC;IACE,qBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,4BAAM,GAAZ;oEACE,MAA8B,EAC9B,OAAqC;YAArC,wBAAA,EAAA,YAAqC;;gBAErC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAmB,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAC;;;KAC3E;IAEK,8BAAQ,GAAd;oEACE,OAAwC;YAAxC,wBAAA,EAAA,YAAwC;;gBAExC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAqB,YAAY,EAAE,OAAO,CAAC,EAAC;;;KACpE;IAED,sBAAW,2BAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,kBAAC;AAAD,CAAC,AAnBD,IAmBC"} \ No newline at end of file diff --git a/lib/Typesense/Configuration.d.ts b/lib/Typesense/Configuration.d.ts deleted file mode 100644 index 1699ecf3..00000000 --- a/lib/Typesense/Configuration.d.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { Logger, LogLevelDesc } from "loglevel"; -import type { Agent as HTTPAgent } from "http"; -import type { Agent as HTTPSAgent } from "https"; -import type { AxiosRequestConfig } from "axios"; -export interface NodeConfiguration { - host: string; - port: number; - protocol: string; - path?: string; - url?: string; -} -export interface NodeConfigurationWithHostname { - host: string; - port: number; - protocol: string; - path?: string; -} -export interface NodeConfigurationWithUrl { - url: string; -} -export interface ConfigurationOptions { - apiKey: string; - nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; - randomizeNodes?: boolean; - /** - * @deprecated - * masterNode is now consolidated to nodes, starting with Typesense Server v0.12' - */ - masterNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; - /** - * @deprecated - * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12' - */ - readReplicaNodes?: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; - nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; - connectionTimeoutSeconds?: number; - timeoutSeconds?: number; - healthcheckIntervalSeconds?: number; - numRetries?: number; - retryIntervalSeconds?: number; - sendApiKeyAsQueryParam?: boolean | undefined; - useServerSideSearchCache?: boolean; - cacheSearchResultsForSeconds?: number; - additionalHeaders?: Record; - logLevel?: LogLevelDesc; - logger?: Logger; - /** - * Set a custom HTTP Agent - * - * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors - * Usage: - * const { Agent: HTTPAgent } = require("http"); - * ... - * httpAgent: new HTTPAgent({ keepAlive: true }), - * @type {HTTPAgent} - */ - httpAgent?: HTTPAgent; - /** - * Set a custom HTTPS Agent - * - * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors - * Usage: - * const { Agent: HTTPSAgent } = require("https"); - * ... - * httpsAgent: new HTTPSAgent({ keepAlive: true }), - * @type {HTTPSAgent} - */ - httpsAgent?: HTTPSAgent; - /** - * Set a custom paramsSerializer - * - * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config - * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397 - * @type {any} - */ - paramsSerializer?: any; - /** - * Set a custom axios adapter - * - * Useful for customizing the underlying HTTP client library used by Typesense. - * - * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge. - * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161 - * - * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config - */ - axiosAdapter?: AxiosRequestConfig["adapter"]; -} -export default class Configuration { - readonly nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; - readonly nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; - readonly connectionTimeoutSeconds: number; - readonly healthcheckIntervalSeconds: number; - readonly numRetries: number; - readonly retryIntervalSeconds: number; - readonly apiKey: string; - readonly sendApiKeyAsQueryParam?: boolean; - readonly cacheSearchResultsForSeconds: number; - readonly useServerSideSearchCache: boolean; - readonly logger: Logger; - readonly logLevel: LogLevelDesc; - readonly additionalHeaders?: Record; - readonly httpAgent?: HTTPAgent; - readonly httpsAgent?: HTTPSAgent; - readonly paramsSerializer?: any; - readonly axiosAdapter?: AxiosRequestConfig["adapter"]; - constructor(options: ConfigurationOptions); - validate(): boolean; - private validateNodes; - private isNodeMissingAnyParameters; - private setDefaultPathInNode; - private setDefaultPortInNode; - private showDeprecationWarnings; - private shuffleArray; -} diff --git a/lib/Typesense/Configuration.js b/lib/Typesense/Configuration.js deleted file mode 100644 index 8cf06682..00000000 --- a/lib/Typesense/Configuration.js +++ /dev/null @@ -1,113 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var logger = tslib_1.__importStar(require("loglevel")); -var Errors_1 = require("./Errors"); -var Configuration = /** @class */ (function () { - function Configuration(options) { - var _this = this; - this.nodes = options.nodes || []; - this.nodes = this.nodes - .map(function (node) { return _this.setDefaultPathInNode(node); }) - .map(function (node) { return _this.setDefaultPortInNode(node); }) - .map(function (node) { return (tslib_1.__assign({}, node)); }); // Make a deep copy - if (options.randomizeNodes == null) { - options.randomizeNodes = true; - } - if (options.randomizeNodes === true) { - this.shuffleArray(this.nodes); - } - this.nearestNode = options.nearestNode; - this.nearestNode = this.setDefaultPathInNode(this.nearestNode); - this.nearestNode = this.setDefaultPortInNode(this.nearestNode); - this.connectionTimeoutSeconds = - options.connectionTimeoutSeconds || options.timeoutSeconds || 5; - this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60; - this.numRetries = - (options.numRetries !== undefined && options.numRetries >= 0 - ? options.numRetries - : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; - this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1; - this.apiKey = options.apiKey; - this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient - this.cacheSearchResultsForSeconds = - options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default - this.useServerSideSearchCache = options.useServerSideSearchCache || false; - this.axiosAdapter = options.axiosAdapter; - this.logger = options.logger || logger; - this.logLevel = options.logLevel || "warn"; - this.logger.setLevel(this.logLevel); - this.additionalHeaders = options.additionalHeaders; - this.httpAgent = options.httpAgent; - this.httpsAgent = options.httpsAgent; - this.paramsSerializer = options.paramsSerializer; - this.showDeprecationWarnings(options); - this.validate(); - } - Configuration.prototype.validate = function () { - if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) { - throw new Errors_1.MissingConfigurationError("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set"); - } - if (this.nearestNode != null && - this.isNodeMissingAnyParameters(this.nearestNode)) { - throw new Errors_1.MissingConfigurationError("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set"); - } - if (this.apiKey == null) { - throw new Errors_1.MissingConfigurationError("Ensure that apiKey is set"); - } - return true; - }; - Configuration.prototype.validateNodes = function () { - var _this = this; - return this.nodes.some(function (node) { - return _this.isNodeMissingAnyParameters(node); - }); - }; - Configuration.prototype.isNodeMissingAnyParameters = function (node) { - return (!["protocol", "host", "port", "path"].every(function (key) { - return node.hasOwnProperty(key); - }) && node["url"] == null); - }; - Configuration.prototype.setDefaultPathInNode = function (node) { - if (node != null && !node.hasOwnProperty("path")) { - node["path"] = ""; - } - return node; - }; - Configuration.prototype.setDefaultPortInNode = function (node) { - if (node != null && - !node.hasOwnProperty("port") && - node.hasOwnProperty("protocol")) { - switch (node["protocol"]) { - case "https": - node["port"] = 443; - break; - case "http": - node["port"] = 80; - break; - } - } - return node; - }; - Configuration.prototype.showDeprecationWarnings = function (options) { - if (options.timeoutSeconds) { - this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"); - } - if (options.masterNode) { - this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"); - } - if (options.readReplicaNodes) { - this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12"); - } - }; - Configuration.prototype.shuffleArray = function (array) { - var _a; - for (var i = array.length - 1; i > 0; i--) { - var j = Math.floor(Math.random() * (i + 1)); - _a = [array[j], array[i]], array[i] = _a[0], array[j] = _a[1]; - } - }; - return Configuration; -}()); -exports.default = Configuration; -//# sourceMappingURL=Configuration.js.map \ No newline at end of file diff --git a/lib/Typesense/Configuration.js.map b/lib/Typesense/Configuration.js.map deleted file mode 100644 index bbbbfaa9..00000000 --- a/lib/Typesense/Configuration.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Configuration.js","sourceRoot":"","sources":["../../src/Typesense/Configuration.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Conversation.d.ts b/lib/Typesense/Conversation.d.ts deleted file mode 100644 index 4e067cb9..00000000 --- a/lib/Typesense/Conversation.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import ApiCall from "./ApiCall"; -export interface ConversationDeleteSchema { - id: number; -} -export interface ConversationUpdateSchema { - ttl: number; -} -export interface ConversationSchema { - id: number; - conversation: object[]; - last_updated: number; - ttl: number; -} -export default class Conversation { - private id; - private apiCall; - constructor(id: string, apiCall: ApiCall); - retrieve(): Promise; - update(params: ConversationUpdateSchema): Promise; - delete(): Promise; - private endpointPath; -} diff --git a/lib/Typesense/Conversation.js b/lib/Typesense/Conversation.js deleted file mode 100644 index b0891aed..00000000 --- a/lib/Typesense/Conversation.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Conversations_1 = tslib_1.__importDefault(require("./Conversations")); -var Conversation = /** @class */ (function () { - function Conversation(id, apiCall) { - this.id = id; - this.apiCall = apiCall; - } - Conversation.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Conversation.prototype.update = function (params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(), params)]; - }); - }); - }; - Conversation.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Conversation.prototype.endpointPath = function () { - return "".concat(Conversations_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); - }; - return Conversation; -}()); -exports.default = Conversation; -//# sourceMappingURL=Conversation.js.map \ No newline at end of file diff --git a/lib/Typesense/Conversation.js.map b/lib/Typesense/Conversation.js.map deleted file mode 100644 index 0a9646b7..00000000 --- a/lib/Typesense/Conversation.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Conversation.js","sourceRoot":"","sources":["../../src/Typesense/Conversation.ts"],"names":[],"mappings":";;;AACA,0EAA4C;AAiB5C;IACE,sBACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,+BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACpE;IAEK,6BAAM,GAAZ,UACE,MAAgC;;;gBAEhC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,EAAC;;;KACH;IAEK,6BAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAA2B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC3E;IAEO,mCAAY,GAApB;QACE,OAAO,UAAG,uBAAa,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;IACxE,CAAC;IACH,mBAAC;AAAD,CAAC,AA1BD,IA0BC"} \ No newline at end of file diff --git a/lib/Typesense/ConversationModel.d.ts b/lib/Typesense/ConversationModel.d.ts deleted file mode 100644 index 1bd8c340..00000000 --- a/lib/Typesense/ConversationModel.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import ApiCall from "./ApiCall"; -export interface ConversationModelCreateSchema { - id?: string; - model_name: string; - api_key?: string; - system_prompt?: string; - max_bytes: number; - history_collection?: string; -} -export interface ConversationModelDeleteSchema { - id: string; -} -export interface ConversationModelSchema extends ConversationModelCreateSchema { - id: string; -} -export default class ConversationModel { - private id; - private apiCall; - constructor(id: string, apiCall: ApiCall); - update(params: ConversationModelCreateSchema): Promise; - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} diff --git a/lib/Typesense/ConversationModel.js b/lib/Typesense/ConversationModel.js deleted file mode 100644 index 2da74c2d..00000000 --- a/lib/Typesense/ConversationModel.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var ConversationModels_1 = tslib_1.__importDefault(require("./ConversationModels")); -var ConversationModel = /** @class */ (function () { - function ConversationModel(id, apiCall) { - this.id = id; - this.apiCall = apiCall; - } - ConversationModel.prototype.update = function (params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(), params)]; - }); - }); - }; - ConversationModel.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - ConversationModel.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - ConversationModel.prototype.endpointPath = function () { - return "".concat(ConversationModels_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); - }; - return ConversationModel; -}()); -exports.default = ConversationModel; -//# sourceMappingURL=ConversationModel.js.map \ No newline at end of file diff --git a/lib/Typesense/ConversationModel.js.map b/lib/Typesense/ConversationModel.js.map deleted file mode 100644 index c9b6a197..00000000 --- a/lib/Typesense/ConversationModel.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ConversationModel.js","sourceRoot":"","sources":["../../src/Typesense/ConversationModel.ts"],"names":[],"mappings":";;;AACA,oFAAsD;AAmBtD;IACE,2BACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,kCAAM,GAAZ,UACE,MAAqC;;;gBAErC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,EAAC;;;KACH;IAEK,oCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEK,kCAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,IAAI,CAAC,YAAY,EAAE,CACpB,EAAC;;;KACH;IAEO,wCAAY,GAApB;QACE,OAAO,UAAG,4BAAkB,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;IAC7E,CAAC;IACH,wBAAC;AAAD,CAAC,AA5BD,IA4BC"} \ No newline at end of file diff --git a/lib/Typesense/ConversationModels.d.ts b/lib/Typesense/ConversationModels.d.ts deleted file mode 100644 index 8a6ef4c4..00000000 --- a/lib/Typesense/ConversationModels.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import ApiCall from "./ApiCall"; -import { ConversationModelCreateSchema, ConversationModelSchema } from "./ConversationModel"; -export default class ConversationModels { - private readonly apiCall; - constructor(apiCall: ApiCall); - create(params: ConversationModelCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/ConversationModels.js b/lib/Typesense/ConversationModels.js deleted file mode 100644 index 29563fc5..00000000 --- a/lib/Typesense/ConversationModels.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/conversations/models"; -var ConversationModels = /** @class */ (function () { - function ConversationModels(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - ConversationModels.prototype.create = function (params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.post(this.endpointPath(), params)]; - }); - }); - }; - ConversationModels.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - ConversationModels.prototype.endpointPath = function (operation) { - return "".concat(ConversationModels.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(ConversationModels, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return ConversationModels; -}()); -exports.default = ConversationModels; -//# sourceMappingURL=ConversationModels.js.map \ No newline at end of file diff --git a/lib/Typesense/ConversationModels.js.map b/lib/Typesense/ConversationModels.js.map deleted file mode 100644 index 3c3b1bc0..00000000 --- a/lib/Typesense/ConversationModels.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ConversationModels.js","sourceRoot":"","sources":["../../src/Typesense/ConversationModels.ts"],"names":[],"mappings":";;;AAMA,IAAM,YAAY,GAAG,uBAAuB,CAAC;AAE7C;IACE,4BAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,mCAAM,GAAZ,UACE,MAAqC;;;gBAErC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,EAAC;;;KACH;IAEK,qCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,CACpB,EAAC;;;KACH;IAEO,yCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,kBAAkB,CAAC,YAAY,SACvC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,kCAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,yBAAC;AAAD,CAAC,AA7BD,IA6BC"} \ No newline at end of file diff --git a/lib/Typesense/Conversations.d.ts b/lib/Typesense/Conversations.d.ts deleted file mode 100644 index 5a4b8dc9..00000000 --- a/lib/Typesense/Conversations.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import ApiCall from "./ApiCall"; -import ConversationModels from "./ConversationModels"; -import ConversationModel from "./ConversationModel"; -import { ConversationSchema } from "./Conversation"; -export interface ConversationsRetrieveSchema { - conversations: ConversationSchema[]; -} -export default class Conversations { - private readonly apiCall; - private readonly _conversationsModels; - private readonly individualConversationModels; - constructor(apiCall: ApiCall); - retrieve(): Promise; - models(): ConversationModels; - models(id: string): ConversationModel; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/Conversations.js b/lib/Typesense/Conversations.js deleted file mode 100644 index 69e67c4d..00000000 --- a/lib/Typesense/Conversations.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var ConversationModels_1 = tslib_1.__importDefault(require("./ConversationModels")); -var ConversationModel_1 = tslib_1.__importDefault(require("./ConversationModel")); -var RESOURCEPATH = "/conversations"; -var Conversations = /** @class */ (function () { - function Conversations(apiCall) { - this.apiCall = apiCall; - this.individualConversationModels = {}; - this.apiCall = apiCall; - this._conversationsModels = new ConversationModels_1.default(this.apiCall); - } - Conversations.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - Conversations.prototype.models = function (id) { - if (id === undefined) { - return this._conversationsModels; - } - else { - if (this.individualConversationModels[id] === undefined) { - this.individualConversationModels[id] = new ConversationModel_1.default(id, this.apiCall); - } - return this.individualConversationModels[id]; - } - }; - Object.defineProperty(Conversations, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Conversations; -}()); -exports.default = Conversations; -//# sourceMappingURL=Conversations.js.map \ No newline at end of file diff --git a/lib/Typesense/Conversations.js.map b/lib/Typesense/Conversations.js.map deleted file mode 100644 index 899cd545..00000000 --- a/lib/Typesense/Conversations.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Conversations.js","sourceRoot":"","sources":["../../src/Typesense/Conversations.ts"],"names":[],"mappings":";;;AACA,oFAAsD;AACtD,kFAAoD;AAGpD,IAAM,YAAY,GAAG,gBAAgB,CAAC;AAMtC;IAOE,uBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAL5B,iCAA4B,GAGzC,EAAE,CAAC;QAGL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,oBAAoB,GAAG,IAAI,4BAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAEK,gCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA8B,YAAY,CAAC,EAAC;;;KACpE;IAID,8BAAM,GAAN,UAAO,EAAW;QAChB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBACxD,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,GAAG,IAAI,2BAAiB,CAC3D,EAAE,EACF,IAAI,CAAC,OAAO,CACb,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,sBAAW,6BAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,oBAAC;AAAD,CAAC,AAnCD,IAmCC"} \ No newline at end of file diff --git a/lib/Typesense/Debug.d.ts b/lib/Typesense/Debug.d.ts deleted file mode 100644 index ac0f44d4..00000000 --- a/lib/Typesense/Debug.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import ApiCall from "./ApiCall"; -export interface DebugResponseSchema { - state: number; - version: string; -} -export default class Debug { - private apiCall; - constructor(apiCall: ApiCall); - retrieve(): Promise; -} diff --git a/lib/Typesense/Debug.js b/lib/Typesense/Debug.js deleted file mode 100644 index fa525663..00000000 --- a/lib/Typesense/Debug.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/debug"; -var Debug = /** @class */ (function () { - function Debug(apiCall) { - this.apiCall = apiCall; - } - Debug.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - return Debug; -}()); -exports.default = Debug; -//# sourceMappingURL=Debug.js.map \ No newline at end of file diff --git a/lib/Typesense/Debug.js.map b/lib/Typesense/Debug.js.map deleted file mode 100644 index 30283311..00000000 --- a/lib/Typesense/Debug.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Debug.js","sourceRoot":"","sources":["../../src/Typesense/Debug.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,QAAQ,CAAC;AAO9B;IACE,eAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,wBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAsB,YAAY,CAAC,EAAC;;;KAC5D;IACH,YAAC;AAAD,CAAC,AAND,IAMC"} \ No newline at end of file diff --git a/lib/Typesense/Document.d.ts b/lib/Typesense/Document.d.ts deleted file mode 100644 index 9f3fff02..00000000 --- a/lib/Typesense/Document.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import ApiCall from "./ApiCall"; -import { DeleteQuery, DocumentSchema, DocumentWriteParameters } from "./Documents"; -export declare class Document { - private collectionName; - private documentId; - private apiCall; - constructor(collectionName: string, documentId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(options?: DeleteQuery): Promise; - update(partialDocument: Partial, options?: DocumentWriteParameters): Promise; - private endpointPath; -} diff --git a/lib/Typesense/Document.js b/lib/Typesense/Document.js deleted file mode 100644 index fc7f8f4e..00000000 --- a/lib/Typesense/Document.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Document = void 0; -var tslib_1 = require("tslib"); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var Documents_1 = tslib_1.__importDefault(require("./Documents")); -var Document = /** @class */ (function () { - function Document(collectionName, documentId, apiCall) { - this.collectionName = collectionName; - this.documentId = documentId; - this.apiCall = apiCall; - } - Document.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Document.prototype.delete = function (options) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath(), options)]; - }); - }); - }; - Document.prototype.update = function (partialDocument_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (partialDocument, options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.patch(this.endpointPath(), partialDocument, options)]; - }); - }); - }; - Document.prototype.endpointPath = function () { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Documents_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.documentId)); - }; - return Document; -}()); -exports.Document = Document; -//# sourceMappingURL=Document.js.map \ No newline at end of file diff --git a/lib/Typesense/Document.js.map b/lib/Typesense/Document.js.map deleted file mode 100644 index d7129738..00000000 --- a/lib/Typesense/Document.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Document.js","sourceRoot":"","sources":["../../src/Typesense/Document.ts"],"names":[],"mappings":";;;;AACA,sEAAwC;AACxC,kEAIqB;AAErB;IACE,kBACU,cAAsB,EACtB,UAAkB,EAClB,OAAgB;QAFhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,2BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAI,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACjD;IAEK,yBAAM,GAAZ,UAAa,OAAqB;;;gBAChC,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAI,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,EAAC;;;KAC7D;IAEK,yBAAM,GAAZ;oEACE,eAA2B,EAC3B,OAAqC;YAArC,wBAAA,EAAA,YAAqC;;gBAErC,sBAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAI,IAAI,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,EAAC;;;KAC7E;IAEO,+BAAY,GAApB;QACE,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAG,mBAAS,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAE,CAAC;IAClJ,CAAC;IACH,eAAC;AAAD,CAAC,AAzBD,IAyBC;AAzBY,4BAAQ"} \ No newline at end of file diff --git a/lib/Typesense/Documents.d.ts b/lib/Typesense/Documents.d.ts deleted file mode 100644 index b494c41a..00000000 --- a/lib/Typesense/Documents.d.ts +++ /dev/null @@ -1,256 +0,0 @@ -import type { ReadStream } from "fs"; -import ApiCall from "./ApiCall"; -import Configuration from "./Configuration"; -import { SearchOnlyDocuments } from "./SearchOnlyDocuments"; -export interface DeleteQuery { - filter_by?: string; - batch_size?: number; - ignore_not_found?: boolean; -} -export interface DeleteResponse { - num_deleted: number; -} -interface ImportResponseSuccess { - success: true; -} -export interface ImportResponseFail { - success: false; - error: string; - document: DocumentSchema; - code: number; -} -export type ImportResponse = ImportResponseSuccess | ImportResponseFail; -export type DocumentSchema = Record; -export interface SearchParamsWithPreset extends Partial { - preset: string; -} -export type DropTokensMode = "right_to_left" | "left_to_right" | "both_sides:3"; -export type OperationMode = "off" | "always" | "fallback"; -export type UnionArrayKeys = { - [K in keyof T]: T[K] extends undefined ? never : NonNullable extends infer R ? R extends R[] ? never : R extends (infer U)[] | infer U ? U[] extends R ? K : never : never : never; -}[keyof T] & keyof T; -export type UnionArraySearchParams = UnionArrayKeys; -export type ArraybleParams = { - readonly [K in UnionArraySearchParams]: string; -}; -export type ExtractBaseTypes = { - [K in keyof T]: K extends UnionArrayKeys ? T[K] extends (infer U)[] | infer U ? U : T[K] : T[K]; -}; -export declare const arrayableParams: ArraybleParams; -export interface SearchParams { - q?: "*" | (string & {}); - query_by?: string | string[]; - query_by_weights?: string | number[]; - prefix?: string | boolean | boolean[]; - filter_by?: string; - enable_synonyms?: boolean; - enable_analytics?: boolean; - filter_curated_hits?: boolean; - enable_lazy_filter?: boolean; - sort_by?: string | string[]; - facet_by?: string | string[]; - max_facet_values?: number; - facet_sample_threshold?: number; - facet_sample_percent?: number; - facet_query?: string; - facet_query_num_typos?: number; - facet_return_parent?: string; - facet_strategy?: "exhaustive" | "top_values" | "automatic"; - page?: number; - per_page?: number; - group_by?: string | string[]; - group_limit?: number; - group_missing_values?: boolean; - include_fields?: string | string[]; - exclude_fields?: string | string[]; - highlight_fields?: string | string[]; - highlight_full_fields?: string | string[]; - highlight_affix_num_tokens?: number; - highlight_start_tag?: string; - highlight_end_tag?: string; - enable_highlight_v1?: boolean; - snippet_threshold?: number; - num_typos?: string | number | number[]; - min_len_1typo?: number; - min_len_2typo?: number; - split_join_tokens?: OperationMode; - exhaustive_search?: boolean; - drop_tokens_threshold?: number; - drop_tokens_mode?: DropTokensMode; - typo_tokens_threshold?: number; - pinned_hits?: string | string[]; - hidden_hits?: string | string[]; - limit_hits?: number; - pre_segmented_query?: boolean; - enable_overrides?: boolean; - override_tags?: string | string[]; - prioritize_exact_match?: boolean; - prioritize_token_position?: boolean; - prioritize_num_matching_fields?: boolean; - search_cutoff_ms?: number; - use_cache?: boolean; - max_candidates?: number; - infix?: OperationMode | OperationMode[]; - preset?: string; - text_match_type?: "max_score" | "max_weight"; - vector_query?: string; - "x-typesense-api-key"?: string; - "x-typesense-user-id"?: string; - offset?: number; - limit?: number; - stopwords?: string; - conversation?: boolean; - conversation_model_id?: string; - conversation_id?: string; - voice_query?: string; -} -type SearchResponseHighlightObject = { - matched_tokens?: string[]; - snippet?: string; - value?: string; -}; -export type SearchResponseHighlight = T extends string | number ? SearchResponseHighlightObject : { - [TAttribute in keyof T]?: SearchResponseHighlight; -}; -export interface SearchResponseHit { - curated?: true; - highlights?: [ - { - field: keyof T; - snippet?: string; - value?: string; - snippets?: string[]; - indices?: number[]; - matched_tokens: string[][] | string[]; - } - ]; - highlight: SearchResponseHighlight; - document: T; - text_match: number; - text_match_info?: { - best_field_score: `${number}`; - best_field_weight: number; - fields_matched: number; - score: `${number}`; - tokens_matched: number; - }; -} -export interface SearchResponseFacetCountSchema { - counts: { - count: number; - highlighted: string; - value: string; - }[]; - field_name: keyof T; - stats: { - avg?: number; - max?: number; - min?: number; - sum?: number; - }; -} -export interface SearchResponseRequestParams { - collection_name?: string; - q?: string; - page?: number; - per_page?: number; - first_q?: string; - voice_query?: { - transcribed_query?: string; - }; -} -export interface SearchResponse { - facet_counts?: SearchResponseFacetCountSchema[]; - found: number; - found_docs?: number; - out_of: number; - page: number; - request_params: SearchResponseRequestParams; - search_time_ms: number; - search_cutoff?: boolean; - hits?: SearchResponseHit[]; - grouped_hits?: { - group_key: string[]; - hits: SearchResponseHit[]; - found?: number; - }[]; - conversation?: { - answer: string; - conversation_history: { - conversation: object[]; - id: string; - last_updated: number; - ttl: number; - }; - conversation_id: string; - query: string; - }; - error?: string; - code?: number; -} -export interface DocumentWriteParameters { - dirty_values?: "coerce_or_reject" | "coerce_or_drop" | "drop" | "reject"; - action?: "create" | "update" | "upsert" | "emplace"; -} -export interface UpdateByFilterParameters { - filter_by?: string; -} -export interface UpdateByFilterResponse { - num_updated: number; -} -export interface DocumentImportParameters extends DocumentWriteParameters { - batch_size?: number; - return_doc?: boolean; - return_id?: boolean; -} -export interface DocumentsExportParameters { - filter_by?: string; - include_fields?: string; - exclude_fields?: string; -} -export interface SearchableDocuments { - search(searchParameters: SearchParams | SearchParamsWithPreset, options: SearchOptions): Promise>; - clearCache(): void; -} -export interface WriteableDocuments { - create(document: T, options: DocumentWriteParameters): Promise; - upsert(document: T, options: DocumentWriteParameters): Promise; - update(document: T, options: DocumentWriteParameters): Promise; - delete(query: DeleteQuery): Promise; - import(documents: T[] | string, options: DocumentWriteParameters): Promise; - export(options: DocumentsExportParameters): Promise; -} -export interface SearchOptions { - cacheSearchResultsForSeconds?: number; - abortSignal?: AbortSignal | null; -} -export default class Documents extends SearchOnlyDocuments implements WriteableDocuments { - constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); - create(document: T, options?: DocumentWriteParameters): Promise; - upsert(document: T, options?: DocumentWriteParameters): Promise; - update(document: T, options: UpdateByFilterParameters): Promise; - update(document: T, options: DocumentWriteParameters): Promise; - delete(query?: DeleteQuery): Promise; - createMany(documents: T[], options?: DocumentImportParameters): Promise; - /** - * Import a set of documents in a batch. - * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects. - * @param options - * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results. - */ - import(documents: string, options?: DocumentImportParameters): Promise; - import(documents: T[], options?: DocumentImportParameters): Promise; - /** - * Imports documents from a NodeJS readable stream of JSONL. - */ - importStream(readableStream: ReadStream, options?: DocumentImportParameters): Promise; - /** - * Returns a JSONL string for all the documents in this collection - */ - export(options?: DocumentsExportParameters): Promise; - /** - * Returns a NodeJS readable stream of JSONL for all the documents in this collection. - */ - exportStream(options?: DocumentsExportParameters): Promise; -} -export {}; diff --git a/lib/Typesense/Documents.js b/lib/Typesense/Documents.js deleted file mode 100644 index 6c2d572b..00000000 --- a/lib/Typesense/Documents.js +++ /dev/null @@ -1,210 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.arrayableParams = void 0; -var tslib_1 = require("tslib"); -var Errors_1 = require("./Errors"); -var SearchOnlyDocuments_1 = require("./SearchOnlyDocuments"); -exports.arrayableParams = { - query_by: "query_by", - query_by_weights: "query_by_weights", - facet_by: "facet_by", - group_by: "group_by", - include_fields: "include_fields", - exclude_fields: "exclude_fields", - highlight_fields: "highlight_fields", - highlight_full_fields: "highlight_full_fields", - pinned_hits: "pinned_hits", - hidden_hits: "hidden_hits", - infix: "infix", - override_tags: "override_tags", - num_typos: "num_typos", - prefix: "prefix", - sort_by: "sort_by", -}; -var isNodeJSEnvironment = typeof process !== "undefined" && - process.versions != null && - process.versions.node != null; -var Documents = /** @class */ (function (_super) { - tslib_1.__extends(Documents, _super); - function Documents(collectionName, apiCall, configuration) { - return _super.call(this, collectionName, apiCall, configuration) || this; - } - Documents.prototype.create = function (document_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (document, options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - if (!document) - throw new Error("No document provided"); - return [2 /*return*/, this.apiCall.post(this.endpointPath(), document, options)]; - }); - }); - }; - Documents.prototype.upsert = function (document_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (document, options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - if (!document) - throw new Error("No document provided"); - return [2 /*return*/, this.apiCall.post(this.endpointPath(), document, Object.assign({}, options, { action: "upsert" }))]; - }); - }); - }; - Documents.prototype.update = function (document_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (document, options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - if (!document) - throw new Error("No document provided"); - if (options["filter_by"] != null) { - return [2 /*return*/, this.apiCall.patch(this.endpointPath(), document, Object.assign({}, options))]; - } - else { - return [2 /*return*/, this.apiCall.post(this.endpointPath(), document, Object.assign({}, options, { action: "update" }))]; - } - return [2 /*return*/]; - }); - }); - }; - Documents.prototype.delete = function () { - return tslib_1.__awaiter(this, arguments, void 0, function (query) { - if (query === void 0) { query = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath(), query)]; - }); - }); - }; - Documents.prototype.createMany = function (documents_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (documents, options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"); - return [2 /*return*/, this.import(documents, options)]; - }); - }); - }; - Documents.prototype.import = function (documents_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (documents, options) { - var documentsInJSONLFormat, resultsInJSONLFormat, resultsInJSONFormat, failedItems; - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: - if (Array.isArray(documents)) { - try { - documentsInJSONLFormat = documents - .map(function (document) { return JSON.stringify(document); }) - .join("\n"); - } - catch (error) { - // if rangeerror, throw custom error message - if (error instanceof RangeError && - error.message.includes("Too many properties to enumerate")) { - throw new Error("".concat(error, "\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n ")); - } - // else, throw the non-range error anyways - throw new Error(error); - } - } - else { - documentsInJSONLFormat = documents; - } - return [4 /*yield*/, this.apiCall.performRequest("post", this.endpointPath("import"), { - queryParameters: options, - bodyParameters: documentsInJSONLFormat, - additionalHeaders: { "Content-Type": "text/plain" }, - skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully - enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 - })]; - case 1: - resultsInJSONLFormat = _a.sent(); - if (Array.isArray(documents)) { - resultsInJSONFormat = resultsInJSONLFormat - .split("\n") - .map(function (r) { return JSON.parse(r); }); - failedItems = resultsInJSONFormat.filter(function (r) { return r.success === false; }); - if (failedItems.length > 0) { - throw new Errors_1.ImportError("".concat(resultsInJSONFormat.length - failedItems.length, " documents imported successfully, ").concat(failedItems.length, " documents failed during import. Use `error.importResults` from the raised exception to get a detailed error reason for each document."), resultsInJSONFormat, { - documentsInJSONLFormat: documentsInJSONLFormat, - options: options, - failedItems: failedItems, - successCount: resultsInJSONFormat.length - failedItems.length, - }); - } - else { - return [2 /*return*/, resultsInJSONFormat]; - } - } - else { - return [2 /*return*/, resultsInJSONLFormat]; - } - return [2 /*return*/]; - } - }); - }); - }; - /** - * Imports documents from a NodeJS readable stream of JSONL. - */ - Documents.prototype.importStream = function (readableStream_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (readableStream, options) { - var resultsInJSONLFormat, resultsInJSONFormat, failedItems; - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.apiCall.performRequest("post", this.endpointPath("import"), { - queryParameters: options, - bodyParameters: readableStream, - additionalHeaders: { "Content-Type": "text/plain" }, - skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully - enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 - })]; - case 1: - resultsInJSONLFormat = _a.sent(); - resultsInJSONFormat = resultsInJSONLFormat - .split("\n") - .map(function (r) { return JSON.parse(r); }); - failedItems = resultsInJSONFormat.filter(function (r) { return r.success === false; }); - if (failedItems.length > 0) { - throw new Errors_1.ImportError("".concat(resultsInJSONFormat.length - failedItems.length, " documents imported successfully, ").concat(failedItems.length, " documents failed during import. Use `error.importResults` from the raised exception to get a detailed error reason for each document."), resultsInJSONFormat, { - documentsInJSONLFormat: readableStream, - options: options, - failedItems: failedItems, - successCount: resultsInJSONFormat.length - failedItems.length, - }); - } - else { - return [2 /*return*/, resultsInJSONFormat]; - } - return [2 /*return*/]; - } - }); - }); - }; - /** - * Returns a JSONL string for all the documents in this collection - */ - Documents.prototype.export = function () { - return tslib_1.__awaiter(this, arguments, void 0, function (options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath("export"), options)]; - }); - }); - }; - /** - * Returns a NodeJS readable stream of JSONL for all the documents in this collection. - */ - Documents.prototype.exportStream = function () { - return tslib_1.__awaiter(this, arguments, void 0, function (options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath("export"), options, { - responseType: "stream", - })]; - }); - }); - }; - return Documents; -}(SearchOnlyDocuments_1.SearchOnlyDocuments)); -exports.default = Documents; -//# sourceMappingURL=Documents.js.map \ No newline at end of file diff --git a/lib/Typesense/Documents.js.map b/lib/Typesense/Documents.js.map deleted file mode 100644 index fcf97f4a..00000000 --- a/lib/Typesense/Documents.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Documents.js","sourceRoot":"","sources":["../../src/Typesense/Documents.ts"],"names":[],"mappings":";;;;AAGA,mCAAuC;AACvC,6DAA4D;AAiE/C,QAAA,eAAe,GAAmB;IAC7C,QAAQ,EAAE,UAAU;IACpB,gBAAgB,EAAE,kBAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,gBAAgB,EAAE,kBAAkB;IACpC,qBAAqB,EAAE,uBAAuB;IAC9C,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,eAAe;IAC9B,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACnB,CAAC;AAuNF,IAAM,mBAAmB,GACvB,OAAO,OAAO,KAAK,WAAW;IAC9B,OAAO,CAAC,QAAQ,IAAI,IAAI;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC;AAEhC;IACU,qCAAsB;IAG9B,mBACE,cAAsB,EACtB,OAAgB,EAChB,aAA4B;QAE5B,OAAA,MAAK,YAAC,cAAc,EAAE,OAAO,EAAE,aAAa,CAAC,SAAC;IAChD,CAAC;IAEK,0BAAM,GAAZ;oEAAa,QAAW,EAAE,OAAqC;YAArC,wBAAA,EAAA,YAAqC;;gBAC7D,IAAI,CAAC,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACvD,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAI,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAC;;;KACrE;IAEK,0BAAM,GAAZ;oEAAa,QAAW,EAAE,OAAqC;YAArC,wBAAA,EAAA,YAAqC;;gBAC7D,IAAI,CAAC,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACvD,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,IAAI,CAAC,YAAY,EAAE,EACnB,QAAQ,EACR,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CACjD,EAAC;;;KACH;IAOK,0BAAM,GAAZ;oEACE,QAAW,EACX,OAAgE;YAAhE,wBAAA,EAAA,YAAgE;;gBAEhE,IAAI,CAAC,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAEvD,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC;oBACjC,sBAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CACvB,IAAI,CAAC,YAAY,EAAE,EACnB,QAAQ,EACR,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAC3B,EAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,IAAI,CAAC,YAAY,EAAE,EACnB,QAAQ,EACR,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CACjD,EAAC;gBACJ,CAAC;;;;KACF;IAEK,0BAAM,GAAZ;oEACE,KAAsC;YAAtC,sBAAA,EAAA,QAAqB,EAAiB;;gBAEtC,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAiB,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC,EAAC;;;KACxE;IAEK,8BAAU,GAAhB;oEAAiB,SAAc,EAAE,OAAsC;YAAtC,wBAAA,EAAA,YAAsC;;gBACrE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAC5B,iKAAiK,CAClK,CAAC;gBACF,sBAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EAAC;;;KACxC;IAgBK,0BAAM,GAAZ;oEACE,SAAuB,EACvB,OAAsC;;YAAtC,wBAAA,EAAA,YAAsC;;;;wBAGtC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;4BAC7B,IAAI,CAAC;gCACH,sBAAsB,GAAG,SAAS;qCAC/B,GAAG,CAAC,UAAC,QAAQ,IAAK,OAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAxB,CAAwB,CAAC;qCAC3C,IAAI,CAAC,IAAI,CAAC,CAAC;4BAChB,CAAC;4BAAC,OAAO,KAAU,EAAE,CAAC;gCACpB,4CAA4C;gCAC5C,IACE,KAAK,YAAY,UAAU;oCAC3B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAC1D,CAAC;oCACD,MAAM,IAAI,KAAK,CAAC,UAAG,KAAK,mVAIvB,CAAC,CAAC;gCACL,CAAC;gCAED,0CAA0C;gCAC1C,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;4BACzB,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,sBAAsB,GAAG,SAAS,CAAC;wBACrC,CAAC;wBAE4B,qBAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAC5D,MAAM,EACN,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC3B;gCACE,eAAe,EAAE,OAAO;gCACxB,cAAc,EAAE,sBAAsB;gCACtC,iBAAiB,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;gCACnD,qBAAqB,EAAE,IAAI,EAAE,+JAA+J;gCAC5L,eAAe,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,oIAAoI;6BAC1L,CACF,EAAA;;wBAVK,oBAAoB,GAAG,SAU5B;wBAED,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;4BACvB,mBAAmB,GAAG,oBAAoB;iCAC7C,KAAK,CAAC,IAAI,CAAC;iCACX,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAb,CAAa,CAAqB,CAAC;4BAC3C,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAC5C,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,KAAK,EAAnB,CAAmB,CAC3B,CAAC;4BACF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC3B,MAAM,IAAI,oBAAW,CACnB,UACE,mBAAmB,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,+CAE/C,WAAW,CAAC,MAAM,2IACsH,EAC1I,mBAAmB,EACnB;oCACE,sBAAsB,wBAAA;oCACtB,OAAO,SAAA;oCACP,WAAW,aAAA;oCACX,YAAY,EAAE,mBAAmB,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM;iCAC9D,CACF,CAAC;4BACJ,CAAC;iCAAM,CAAC;gCACN,sBAAO,mBAAmB,EAAC;4BAC7B,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,sBAAO,oBAA8B,EAAC;wBACxC,CAAC;;;;;KACF;IACD;;OAEG;IACG,gCAAY,GAAlB;oEACE,cAA0B,EAC1B,OAAsC;;YAAtC,wBAAA,EAAA,YAAsC;;;4BAET,qBAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAC5D,MAAM,EACN,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC3B;4BACE,eAAe,EAAE,OAAO;4BACxB,cAAc,EAAE,cAAc;4BAC9B,iBAAiB,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;4BACnD,qBAAqB,EAAE,IAAI,EAAE,+JAA+J;4BAC5L,eAAe,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,oIAAoI;yBAC1L,CACF,EAAA;;wBAVK,oBAAoB,GAAG,SAU5B;wBAEK,mBAAmB,GAAG,oBAAoB;6BAC7C,KAAK,CAAC,IAAI,CAAC;6BACX,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAb,CAAa,CAAqB,CAAC;wBAC3C,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,KAAK,EAAnB,CAAmB,CAAC,CAAC;wBAC3E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC3B,MAAM,IAAI,oBAAW,CACnB,UACE,mBAAmB,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,+CAE/C,WAAW,CAAC,MAAM,2IACsH,EAC1I,mBAAmB,EACnB;gCACE,sBAAsB,EAAE,cAAc;gCACtC,OAAO,SAAA;gCACP,WAAW,aAAA;gCACX,YAAY,EAAE,mBAAmB,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM;6BAC9D,CACF,CAAC;wBACJ,CAAC;6BAAM,CAAC;4BACN,sBAAO,mBAAmB,EAAC;wBAC7B,CAAC;;;;;KACF;IAED;;OAEG;IACG,0BAAM,GAAZ;oEAAa,OAAuC;YAAvC,wBAAA,EAAA,YAAuC;;gBAClD,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAS,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,EAAC;;;KACvE;IAED;;OAEG;IACG,gCAAY,GAAlB;oEACE,OAAuC;YAAvC,wBAAA,EAAA,YAAuC;;gBAEvC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAa,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE;wBACxE,YAAY,EAAE,QAAQ;qBACvB,CAAC,EAAC;;;KACJ;IACH,gBAAC;AAAD,CAAC,AAlND,CACU,yCAAmB,GAiN5B"} \ No newline at end of file diff --git a/lib/Typesense/Errors/HTTPError.d.ts b/lib/Typesense/Errors/HTTPError.d.ts deleted file mode 100644 index 499e415a..00000000 --- a/lib/Typesense/Errors/HTTPError.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import TypesenseError from "./TypesenseError"; -export default class HTTPError extends TypesenseError { -} diff --git a/lib/Typesense/Errors/HTTPError.js b/lib/Typesense/Errors/HTTPError.js deleted file mode 100644 index aabc1054..00000000 --- a/lib/Typesense/Errors/HTTPError.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var HTTPError = /** @class */ (function (_super) { - tslib_1.__extends(HTTPError, _super); - function HTTPError() { - return _super !== null && _super.apply(this, arguments) || this; - } - return HTTPError; -}(TypesenseError_1.default)); -exports.default = HTTPError; -//# sourceMappingURL=HTTPError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/HTTPError.js.map b/lib/Typesense/Errors/HTTPError.js.map deleted file mode 100644 index e9ca4f58..00000000 --- a/lib/Typesense/Errors/HTTPError.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"HTTPError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/HTTPError.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAuC,qCAAc;IAArD;;IAAuD,CAAC;IAAD,gBAAC;AAAD,CAAC,AAAxD,CAAuC,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ImportError.d.ts b/lib/Typesense/Errors/ImportError.d.ts deleted file mode 100644 index d6abbc85..00000000 --- a/lib/Typesense/Errors/ImportError.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import TypesenseError from "./TypesenseError"; -import type { DocumentImportParameters, ImportResponse } from "../Documents"; -import { ReadStream } from "node:fs"; -interface ImportErrorPayload { - documentsInJSONLFormat: string | ReadStream; - options: DocumentImportParameters; - failedItems: ImportResponse[]; - successCount: number; -} -export default class ImportError extends TypesenseError { - payload: ImportErrorPayload; - importResults: ImportResponse[]; - constructor(message: string, importResults: ImportResponse[], payload: ImportErrorPayload); -} -export {}; diff --git a/lib/Typesense/Errors/ImportError.js b/lib/Typesense/Errors/ImportError.js deleted file mode 100644 index e9f1eaf0..00000000 --- a/lib/Typesense/Errors/ImportError.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var ImportError = /** @class */ (function (_super) { - tslib_1.__extends(ImportError, _super); - function ImportError(message, importResults, payload) { - var _this = _super.call(this, message) || this; - _this.importResults = importResults; - _this.payload = payload; - return _this; - } - return ImportError; -}(TypesenseError_1.default)); -exports.default = ImportError; -//# sourceMappingURL=ImportError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ImportError.js.map b/lib/Typesense/Errors/ImportError.js.map deleted file mode 100644 index d0a8fecf..00000000 --- a/lib/Typesense/Errors/ImportError.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ImportError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ImportError.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAW9C;IAAyC,uCAAc;IAGrD,qBACE,OAAe,EACf,aAA+B,EAC/B,OAA2B;QAE3B,YAAA,MAAK,YAAC,OAAO,CAAC,SAAC;QACf,KAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;;IACzB,CAAC;IACH,kBAAC;AAAD,CAAC,AAZD,CAAyC,wBAAc,GAYtD"} \ No newline at end of file diff --git a/lib/Typesense/Errors/MissingConfigurationError.d.ts b/lib/Typesense/Errors/MissingConfigurationError.d.ts deleted file mode 100644 index 7977c65b..00000000 --- a/lib/Typesense/Errors/MissingConfigurationError.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import TypesenseError from "./TypesenseError"; -export default class MissingConfigurationError extends TypesenseError { -} diff --git a/lib/Typesense/Errors/MissingConfigurationError.js b/lib/Typesense/Errors/MissingConfigurationError.js deleted file mode 100644 index 2161b0ac..00000000 --- a/lib/Typesense/Errors/MissingConfigurationError.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var MissingConfigurationError = /** @class */ (function (_super) { - tslib_1.__extends(MissingConfigurationError, _super); - function MissingConfigurationError() { - return _super !== null && _super.apply(this, arguments) || this; - } - return MissingConfigurationError; -}(TypesenseError_1.default)); -exports.default = MissingConfigurationError; -//# sourceMappingURL=MissingConfigurationError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/MissingConfigurationError.js.map b/lib/Typesense/Errors/MissingConfigurationError.js.map deleted file mode 100644 index 6e2efa82..00000000 --- a/lib/Typesense/Errors/MissingConfigurationError.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"MissingConfigurationError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/MissingConfigurationError.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAuD,qDAAc;IAArE;;IAAuE,CAAC;IAAD,gCAAC;AAAD,CAAC,AAAxE,CAAuD,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectAlreadyExists.d.ts b/lib/Typesense/Errors/ObjectAlreadyExists.d.ts deleted file mode 100644 index 92e7e21d..00000000 --- a/lib/Typesense/Errors/ObjectAlreadyExists.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import TypesenseError from "./TypesenseError"; -export default class ObjectAlreadyExists extends TypesenseError { -} diff --git a/lib/Typesense/Errors/ObjectAlreadyExists.js b/lib/Typesense/Errors/ObjectAlreadyExists.js deleted file mode 100644 index 9f0e6381..00000000 --- a/lib/Typesense/Errors/ObjectAlreadyExists.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var ObjectAlreadyExists = /** @class */ (function (_super) { - tslib_1.__extends(ObjectAlreadyExists, _super); - function ObjectAlreadyExists() { - return _super !== null && _super.apply(this, arguments) || this; - } - return ObjectAlreadyExists; -}(TypesenseError_1.default)); -exports.default = ObjectAlreadyExists; -//# sourceMappingURL=ObjectAlreadyExists.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectAlreadyExists.js.map b/lib/Typesense/Errors/ObjectAlreadyExists.js.map deleted file mode 100644 index 7e7860b5..00000000 --- a/lib/Typesense/Errors/ObjectAlreadyExists.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ObjectAlreadyExists.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ObjectAlreadyExists.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAiD,+CAAc;IAA/D;;IAAiE,CAAC;IAAD,0BAAC;AAAD,CAAC,AAAlE,CAAiD,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectNotFound.d.ts b/lib/Typesense/Errors/ObjectNotFound.d.ts deleted file mode 100644 index 9408bd6e..00000000 --- a/lib/Typesense/Errors/ObjectNotFound.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import TypesenseError from "./TypesenseError"; -export default class ObjectNotFound extends TypesenseError { -} diff --git a/lib/Typesense/Errors/ObjectNotFound.js b/lib/Typesense/Errors/ObjectNotFound.js deleted file mode 100644 index 9acaab66..00000000 --- a/lib/Typesense/Errors/ObjectNotFound.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var ObjectNotFound = /** @class */ (function (_super) { - tslib_1.__extends(ObjectNotFound, _super); - function ObjectNotFound() { - return _super !== null && _super.apply(this, arguments) || this; - } - return ObjectNotFound; -}(TypesenseError_1.default)); -exports.default = ObjectNotFound; -//# sourceMappingURL=ObjectNotFound.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectNotFound.js.map b/lib/Typesense/Errors/ObjectNotFound.js.map deleted file mode 100644 index e216c403..00000000 --- a/lib/Typesense/Errors/ObjectNotFound.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ObjectNotFound.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ObjectNotFound.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAA4C,0CAAc;IAA1D;;IAA4D,CAAC;IAAD,qBAAC;AAAD,CAAC,AAA7D,CAA4C,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectUnprocessable.d.ts b/lib/Typesense/Errors/ObjectUnprocessable.d.ts deleted file mode 100644 index f0517f89..00000000 --- a/lib/Typesense/Errors/ObjectUnprocessable.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import TypesenseError from "./TypesenseError"; -export default class ObjectUnprocessable extends TypesenseError { -} diff --git a/lib/Typesense/Errors/ObjectUnprocessable.js b/lib/Typesense/Errors/ObjectUnprocessable.js deleted file mode 100644 index ec3e9866..00000000 --- a/lib/Typesense/Errors/ObjectUnprocessable.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var ObjectUnprocessable = /** @class */ (function (_super) { - tslib_1.__extends(ObjectUnprocessable, _super); - function ObjectUnprocessable() { - return _super !== null && _super.apply(this, arguments) || this; - } - return ObjectUnprocessable; -}(TypesenseError_1.default)); -exports.default = ObjectUnprocessable; -//# sourceMappingURL=ObjectUnprocessable.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectUnprocessable.js.map b/lib/Typesense/Errors/ObjectUnprocessable.js.map deleted file mode 100644 index 812b7f1c..00000000 --- a/lib/Typesense/Errors/ObjectUnprocessable.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ObjectUnprocessable.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ObjectUnprocessable.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAiD,+CAAc;IAA/D;;IAAiE,CAAC;IAAD,0BAAC;AAAD,CAAC,AAAlE,CAAiD,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/RequestMalformed.d.ts b/lib/Typesense/Errors/RequestMalformed.d.ts deleted file mode 100644 index 4d87ac81..00000000 --- a/lib/Typesense/Errors/RequestMalformed.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import TypesenseError from "./TypesenseError"; -export default class RequestMalformed extends TypesenseError { -} diff --git a/lib/Typesense/Errors/RequestMalformed.js b/lib/Typesense/Errors/RequestMalformed.js deleted file mode 100644 index 46fb1652..00000000 --- a/lib/Typesense/Errors/RequestMalformed.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var RequestMalformed = /** @class */ (function (_super) { - tslib_1.__extends(RequestMalformed, _super); - function RequestMalformed() { - return _super !== null && _super.apply(this, arguments) || this; - } - return RequestMalformed; -}(TypesenseError_1.default)); -exports.default = RequestMalformed; -//# sourceMappingURL=RequestMalformed.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/RequestMalformed.js.map b/lib/Typesense/Errors/RequestMalformed.js.map deleted file mode 100644 index 636779b9..00000000 --- a/lib/Typesense/Errors/RequestMalformed.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"RequestMalformed.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/RequestMalformed.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAA8C,4CAAc;IAA5D;;IAA8D,CAAC;IAAD,uBAAC;AAAD,CAAC,AAA/D,CAA8C,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/RequestUnauthorized.d.ts b/lib/Typesense/Errors/RequestUnauthorized.d.ts deleted file mode 100644 index 281ad728..00000000 --- a/lib/Typesense/Errors/RequestUnauthorized.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import TypesenseError from "./TypesenseError"; -export default class RequestUnauthorized extends TypesenseError { -} diff --git a/lib/Typesense/Errors/RequestUnauthorized.js b/lib/Typesense/Errors/RequestUnauthorized.js deleted file mode 100644 index ac5f70f9..00000000 --- a/lib/Typesense/Errors/RequestUnauthorized.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var RequestUnauthorized = /** @class */ (function (_super) { - tslib_1.__extends(RequestUnauthorized, _super); - function RequestUnauthorized() { - return _super !== null && _super.apply(this, arguments) || this; - } - return RequestUnauthorized; -}(TypesenseError_1.default)); -exports.default = RequestUnauthorized; -//# sourceMappingURL=RequestUnauthorized.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/RequestUnauthorized.js.map b/lib/Typesense/Errors/RequestUnauthorized.js.map deleted file mode 100644 index 8764f799..00000000 --- a/lib/Typesense/Errors/RequestUnauthorized.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"RequestUnauthorized.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/RequestUnauthorized.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAiD,+CAAc;IAA/D;;IAAiE,CAAC;IAAD,0BAAC;AAAD,CAAC,AAAlE,CAAiD,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ServerError.d.ts b/lib/Typesense/Errors/ServerError.d.ts deleted file mode 100644 index f89362a1..00000000 --- a/lib/Typesense/Errors/ServerError.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import TypesenseError from "./TypesenseError"; -export default class ServerError extends TypesenseError { -} diff --git a/lib/Typesense/Errors/ServerError.js b/lib/Typesense/Errors/ServerError.js deleted file mode 100644 index e3bf3f15..00000000 --- a/lib/Typesense/Errors/ServerError.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var ServerError = /** @class */ (function (_super) { - tslib_1.__extends(ServerError, _super); - function ServerError() { - return _super !== null && _super.apply(this, arguments) || this; - } - return ServerError; -}(TypesenseError_1.default)); -exports.default = ServerError; -//# sourceMappingURL=ServerError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ServerError.js.map b/lib/Typesense/Errors/ServerError.js.map deleted file mode 100644 index bac2216a..00000000 --- a/lib/Typesense/Errors/ServerError.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ServerError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ServerError.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAyC,uCAAc;IAAvD;;IAAyD,CAAC;IAAD,kBAAC;AAAD,CAAC,AAA1D,CAAyC,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/TypesenseError.d.ts b/lib/Typesense/Errors/TypesenseError.d.ts deleted file mode 100644 index caf9ac73..00000000 --- a/lib/Typesense/Errors/TypesenseError.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default class TypesenseError extends Error { - httpStatus?: number; - httpBody?: string; - constructor(message?: string, httpBody?: string, httpStatus?: number); -} diff --git a/lib/Typesense/Errors/TypesenseError.js b/lib/Typesense/Errors/TypesenseError.js deleted file mode 100644 index 39ad6dfc..00000000 --- a/lib/Typesense/Errors/TypesenseError.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError = /** @class */ (function (_super) { - tslib_1.__extends(TypesenseError, _super); - // Source: https://stackoverflow.com/a/58417721/123545 - function TypesenseError(message, httpBody, httpStatus) { - var _newTarget = this.constructor; - var _this = _super.call(this, message) || this; - _this.name = _newTarget.name; - _this.httpBody = httpBody; - _this.httpStatus = httpStatus; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return TypesenseError; -}(Error)); -exports.default = TypesenseError; -//# sourceMappingURL=TypesenseError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/TypesenseError.js.map b/lib/Typesense/Errors/TypesenseError.js.map deleted file mode 100644 index beab88dc..00000000 --- a/lib/Typesense/Errors/TypesenseError.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TypesenseError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/TypesenseError.ts"],"names":[],"mappings":";;;AAAA;IAA4C,0CAAK;IAI/C,sDAAsD;IACtD,wBAAY,OAAgB,EAAE,QAAiB,EAAE,UAAmB;;QAClE,YAAA,MAAK,YAAC,OAAO,CAAC,SAAC;QACf,KAAI,CAAC,IAAI,GAAG,WAAW,IAAI,CAAC;QAC5B,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,KAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;;IACpD,CAAC;IACH,qBAAC;AAAD,CAAC,AAZD,CAA4C,KAAK,GAYhD"} \ No newline at end of file diff --git a/lib/Typesense/Errors/index.d.ts b/lib/Typesense/Errors/index.d.ts deleted file mode 100644 index e5046195..00000000 --- a/lib/Typesense/Errors/index.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import HTTPError from "./HTTPError"; -import MissingConfigurationError from "./MissingConfigurationError"; -import ObjectAlreadyExists from "./ObjectAlreadyExists"; -import ObjectNotFound from "./ObjectNotFound"; -import ObjectUnprocessable from "./ObjectUnprocessable"; -import RequestMalformed from "./RequestMalformed"; -import RequestUnauthorized from "./RequestUnauthorized"; -import ServerError from "./ServerError"; -import ImportError from "./ImportError"; -import TypesenseError from "./TypesenseError"; -export { HTTPError, MissingConfigurationError, ObjectAlreadyExists, ObjectNotFound, ObjectUnprocessable, RequestMalformed, RequestUnauthorized, ServerError, TypesenseError, ImportError, }; diff --git a/lib/Typesense/Errors/index.js b/lib/Typesense/Errors/index.js deleted file mode 100644 index 5740bee1..00000000 --- a/lib/Typesense/Errors/index.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ImportError = exports.TypesenseError = exports.ServerError = exports.RequestUnauthorized = exports.RequestMalformed = exports.ObjectUnprocessable = exports.ObjectNotFound = exports.ObjectAlreadyExists = exports.MissingConfigurationError = exports.HTTPError = void 0; -var tslib_1 = require("tslib"); -var HTTPError_1 = tslib_1.__importDefault(require("./HTTPError")); -exports.HTTPError = HTTPError_1.default; -var MissingConfigurationError_1 = tslib_1.__importDefault(require("./MissingConfigurationError")); -exports.MissingConfigurationError = MissingConfigurationError_1.default; -var ObjectAlreadyExists_1 = tslib_1.__importDefault(require("./ObjectAlreadyExists")); -exports.ObjectAlreadyExists = ObjectAlreadyExists_1.default; -var ObjectNotFound_1 = tslib_1.__importDefault(require("./ObjectNotFound")); -exports.ObjectNotFound = ObjectNotFound_1.default; -var ObjectUnprocessable_1 = tslib_1.__importDefault(require("./ObjectUnprocessable")); -exports.ObjectUnprocessable = ObjectUnprocessable_1.default; -var RequestMalformed_1 = tslib_1.__importDefault(require("./RequestMalformed")); -exports.RequestMalformed = RequestMalformed_1.default; -var RequestUnauthorized_1 = tslib_1.__importDefault(require("./RequestUnauthorized")); -exports.RequestUnauthorized = RequestUnauthorized_1.default; -var ServerError_1 = tslib_1.__importDefault(require("./ServerError")); -exports.ServerError = ServerError_1.default; -var ImportError_1 = tslib_1.__importDefault(require("./ImportError")); -exports.ImportError = ImportError_1.default; -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -exports.TypesenseError = TypesenseError_1.default; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/index.js.map b/lib/Typesense/Errors/index.js.map deleted file mode 100644 index 45d675ea..00000000 --- a/lib/Typesense/Errors/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/index.ts"],"names":[],"mappings":";;;;AAAA,kEAAoC;AAYlC,oBAZK,mBAAS,CAYL;AAXX,kGAAoE;AAYlE,oCAZK,mCAAyB,CAYL;AAX3B,sFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,4EAA8C;AAY5C,yBAZK,wBAAc,CAYL;AAXhB,sFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,gFAAkD;AAYhD,2BAZK,0BAAgB,CAYL;AAXlB,sFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,sEAAwC;AAYtC,sBAZK,qBAAW,CAYL;AAXb,sEAAwC;AAatC,sBAbK,qBAAW,CAaL;AAZb,4EAA8C;AAW5C,yBAXK,wBAAc,CAWL"} \ No newline at end of file diff --git a/lib/Typesense/Health.d.ts b/lib/Typesense/Health.d.ts deleted file mode 100644 index 8bf91aa8..00000000 --- a/lib/Typesense/Health.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import ApiCall from "./ApiCall"; -export interface HealthResponse { - ok: boolean; -} -export default class Health { - private apiCall; - constructor(apiCall: ApiCall); - retrieve(): Promise; -} diff --git a/lib/Typesense/Health.js b/lib/Typesense/Health.js deleted file mode 100644 index 0c28608a..00000000 --- a/lib/Typesense/Health.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/health"; -var Health = /** @class */ (function () { - function Health(apiCall) { - this.apiCall = apiCall; - } - Health.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - return Health; -}()); -exports.default = Health; -//# sourceMappingURL=Health.js.map \ No newline at end of file diff --git a/lib/Typesense/Health.js.map b/lib/Typesense/Health.js.map deleted file mode 100644 index a424ca10..00000000 --- a/lib/Typesense/Health.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Health.js","sourceRoot":"","sources":["../../src/Typesense/Health.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,SAAS,CAAC;AAM/B;IACE,gBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,yBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAiB,YAAY,CAAC,EAAC;;;KACvD;IACH,aAAC;AAAD,CAAC,AAND,IAMC"} \ No newline at end of file diff --git a/lib/Typesense/Key.d.ts b/lib/Typesense/Key.d.ts deleted file mode 100644 index 6b888cf5..00000000 --- a/lib/Typesense/Key.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import ApiCall from "./ApiCall"; -export interface KeyCreateSchema { - actions: string[]; - collections: string[]; - description?: string; - value?: string; - value_prefix?: string; - expires_at?: number; - autodelete?: boolean; -} -export interface KeyDeleteSchema { - id: number; -} -export interface KeySchema extends KeyCreateSchema { - id: number; -} -export default class Key { - private id; - private apiCall; - constructor(id: number, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} diff --git a/lib/Typesense/Key.js b/lib/Typesense/Key.js deleted file mode 100644 index 27538455..00000000 --- a/lib/Typesense/Key.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Keys_1 = tslib_1.__importDefault(require("./Keys")); -var Key = /** @class */ (function () { - function Key(id, apiCall) { - this.id = id; - this.apiCall = apiCall; - } - Key.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Key.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Key.prototype.endpointPath = function () { - return "".concat(Keys_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); - }; - return Key; -}()); -exports.default = Key; -//# sourceMappingURL=Key.js.map \ No newline at end of file diff --git a/lib/Typesense/Key.js.map b/lib/Typesense/Key.js.map deleted file mode 100644 index 4eb8658c..00000000 --- a/lib/Typesense/Key.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Key.js","sourceRoot":"","sources":["../../src/Typesense/Key.ts"],"names":[],"mappings":";;;AACA,wDAA0B;AAoB1B;IACE,aACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,sBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAY,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACzD;IAEK,oBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAkB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAClE;IAEO,0BAAY,GAApB;QACE,OAAO,UAAG,cAAI,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;IAC/D,CAAC;IACH,UAAC;AAAD,CAAC,AAjBD,IAiBC"} \ No newline at end of file diff --git a/lib/Typesense/Keys.d.ts b/lib/Typesense/Keys.d.ts deleted file mode 100644 index ca8817d9..00000000 --- a/lib/Typesense/Keys.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import ApiCall from "./ApiCall"; -import { KeyCreateSchema, KeySchema } from "./Key"; -import { SearchParams } from "./Documents"; -export interface KeysRetrieveSchema { - keys: KeySchema[]; -} -export interface GenerateScopedSearchKeyParams extends Partial { - expires_at?: number; - cache_ttl?: number; - limit_multi_searches?: number; -} -export default class Keys { - private apiCall; - constructor(apiCall: ApiCall); - create(params: KeyCreateSchema): Promise; - retrieve(): Promise; - generateScopedSearchKey(searchKey: string, parameters: GenerateScopedSearchKeyParams): string; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/Keys.js b/lib/Typesense/Keys.js deleted file mode 100644 index 55741a65..00000000 --- a/lib/Typesense/Keys.js +++ /dev/null @@ -1,46 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var crypto_1 = require("crypto"); -var Utils_1 = require("./Utils"); -var RESOURCEPATH = "/keys"; -var Keys = /** @class */ (function () { - function Keys(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - Keys.prototype.create = function (params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.post(Keys.RESOURCEPATH, params)]; - }); - }); - }; - Keys.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - Keys.prototype.generateScopedSearchKey = function (searchKey, parameters) { - // Note: only a key generated with the `documents:search` action will be - // accepted by the server, when usined with the search endpoint. - var normalizedParams = (0, Utils_1.normalizeArrayableParams)(parameters); - var paramsJSON = JSON.stringify(normalizedParams); - var digest = Buffer.from((0, crypto_1.createHmac)("sha256", searchKey).update(paramsJSON).digest("base64")); - var keyPrefix = searchKey.substr(0, 4); - var rawScopedKey = "".concat(digest).concat(keyPrefix).concat(paramsJSON); - return Buffer.from(rawScopedKey).toString("base64"); - }; - Object.defineProperty(Keys, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Keys; -}()); -exports.default = Keys; -//# sourceMappingURL=Keys.js.map \ No newline at end of file diff --git a/lib/Typesense/Keys.js.map b/lib/Typesense/Keys.js.map deleted file mode 100644 index 46be753e..00000000 --- a/lib/Typesense/Keys.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Keys.js","sourceRoot":"","sources":["../../src/Typesense/Keys.ts"],"names":[],"mappings":";;;AAAA,iCAAoC;AAIpC,iCAAmD;AAEnD,IAAM,YAAY,GAAG,OAAO,CAAC;AAY7B;IACE,cAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,qBAAM,GAAZ,UAAa,MAAuB;;;gBAClC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAY,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,EAAC;;;KAChE;IAEK,uBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAqB,YAAY,CAAC,EAAC;;;KAC3D;IAED,sCAAuB,GAAvB,UACE,SAAiB,EACjB,UAAyC;QAEzC,wEAAwE;QACxE,gEAAgE;QAChE,IAAM,gBAAgB,GAAG,IAAA,gCAAwB,EAAC,UAAU,CAAC,CAAC;QAC9D,IAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACxB,IAAA,mBAAU,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CACpE,CAAC;QACF,IAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,IAAM,YAAY,GAAG,UAAG,MAAM,SAAG,SAAS,SAAG,UAAU,CAAE,CAAC;QAE1D,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,sBAAW,oBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,WAAC;AAAD,CAAC,AAjCD,IAiCC"} \ No newline at end of file diff --git a/lib/Typesense/Metrics.d.ts b/lib/Typesense/Metrics.d.ts deleted file mode 100644 index e2aa4210..00000000 --- a/lib/Typesense/Metrics.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import ApiCall from "./ApiCall"; -export interface MetricsResponse { - [key: `system_cpu${number}_active_percentage`]: string; - system_cpu_active_percentage: string; - system_disk_total_bytes: string; - system_disk_used_bytes: string; - system_memory_total_bytes: string; - system_memory_total_swap_bytes?: string; - system_memory_used_bytes: string; - system_memory_used_swap_bytes?: string; - system_network_received_bytes: string; - system_network_sent_bytes: string; - typesense_memory_active_bytes: string; - typesense_memory_allocated_bytes: string; - typesense_memory_fragmentation_ratio: string; - typesense_memory_mapped_bytes: string; - typesense_memory_metadata_bytes: string; - typesense_memory_resident_bytes: string; - typesense_memory_retained_bytes: string; -} -export default class Metrics { - private apiCall; - constructor(apiCall: ApiCall); - retrieve(): Promise; -} diff --git a/lib/Typesense/Metrics.js b/lib/Typesense/Metrics.js deleted file mode 100644 index 9c564425..00000000 --- a/lib/Typesense/Metrics.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/metrics.json"; -var Metrics = /** @class */ (function () { - function Metrics(apiCall) { - this.apiCall = apiCall; - } - Metrics.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - return Metrics; -}()); -exports.default = Metrics; -//# sourceMappingURL=Metrics.js.map \ No newline at end of file diff --git a/lib/Typesense/Metrics.js.map b/lib/Typesense/Metrics.js.map deleted file mode 100644 index 55e1f29e..00000000 --- a/lib/Typesense/Metrics.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Metrics.js","sourceRoot":"","sources":["../../src/Typesense/Metrics.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,eAAe,CAAC;AAsBrC;IACE,iBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC;;;KACvC;IACH,cAAC;AAAD,CAAC,AAND,IAMC"} \ No newline at end of file diff --git a/lib/Typesense/MultiSearch.d.ts b/lib/Typesense/MultiSearch.d.ts deleted file mode 100644 index 335a5f33..00000000 --- a/lib/Typesense/MultiSearch.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import ApiCall from "./ApiCall"; -import Configuration from "./Configuration"; -import { DocumentSchema, SearchParams, SearchParamsWithPreset, SearchResponse } from "./Documents"; -export interface MultiSearchRequestSchema extends SearchParams { - collection?: string; - "x-typesense-api-key"?: string; -} -export interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { - collection?: string; - "x-typesense-api-key"?: string; -} -export interface MultiSearchRequestsSchema { - searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; -} -export interface MultiSearchResponse { - results: { - [Index in keyof T]: SearchResponse; - } & { - length: T["length"]; - }; -} -export default class MultiSearch { - private apiCall; - private configuration; - private useTextContentType; - private requestWithCache; - constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); - clearCache(): void; - perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { - cacheSearchResultsForSeconds?: number; - }): Promise>; -} diff --git a/lib/Typesense/MultiSearch.js b/lib/Typesense/MultiSearch.js deleted file mode 100644 index 2f5e72e2..00000000 --- a/lib/Typesense/MultiSearch.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RequestWithCache_1 = tslib_1.__importDefault(require("./RequestWithCache")); -var Utils_1 = require("./Utils"); -var RESOURCEPATH = "/multi_search"; -var MultiSearch = /** @class */ (function () { - function MultiSearch(apiCall, configuration, useTextContentType) { - if (useTextContentType === void 0) { useTextContentType = false; } - this.apiCall = apiCall; - this.configuration = configuration; - this.useTextContentType = useTextContentType; - this.requestWithCache = new RequestWithCache_1.default(); - } - MultiSearch.prototype.clearCache = function () { - this.requestWithCache.clearCache(); - }; - MultiSearch.prototype.perform = function (searchRequests_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (searchRequests, commonParams, _a) { - var additionalHeaders, additionalQueryParams, queryParams, normalizedSearchRequests, normalizedQueryParams; - if (commonParams === void 0) { commonParams = {}; } - var _b = _a === void 0 ? {} : _a, _c = _b.cacheSearchResultsForSeconds, cacheSearchResultsForSeconds = _c === void 0 ? this.configuration - .cacheSearchResultsForSeconds : _c; - return tslib_1.__generator(this, function (_d) { - additionalHeaders = {}; - if (this.useTextContentType) { - additionalHeaders["content-type"] = "text/plain"; - } - additionalQueryParams = {}; - if (this.configuration.useServerSideSearchCache === true) { - additionalQueryParams["use_cache"] = true; - } - queryParams = tslib_1.__assign(tslib_1.__assign({}, commonParams), additionalQueryParams); - normalizedSearchRequests = { - searches: searchRequests.searches.map(Utils_1.normalizeArrayableParams), - }; - normalizedQueryParams = (0, Utils_1.normalizeArrayableParams)(queryParams); - return [2 /*return*/, this.requestWithCache.perform(this.apiCall, this.apiCall.post, [ - RESOURCEPATH, - normalizedSearchRequests, - normalizedQueryParams, - additionalHeaders, - ], { cacheResponseForSeconds: cacheSearchResultsForSeconds })]; - }); - }); - }; - return MultiSearch; -}()); -exports.default = MultiSearch; -//# sourceMappingURL=MultiSearch.js.map \ No newline at end of file diff --git a/lib/Typesense/MultiSearch.js.map b/lib/Typesense/MultiSearch.js.map deleted file mode 100644 index fe7197ac..00000000 --- a/lib/Typesense/MultiSearch.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"MultiSearch.js","sourceRoot":"","sources":["../../src/Typesense/MultiSearch.ts"],"names":[],"mappings":";;;AAEA,gFAAkD;AAOlD,iCAAmD;AAEnD,IAAM,YAAY,GAAG,eAAe,CAAC;AAuBrC;IAGE,qBACU,OAAgB,EAChB,aAA4B,EAC5B,kBAAmC;QAAnC,mCAAA,EAAA,0BAAmC;QAFnC,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAAe;QAC5B,uBAAkB,GAAlB,kBAAkB,CAAiB;QAE3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,0BAAgB,EAAE,CAAC;IACjD,CAAC;IAED,gCAAU,GAAV;QACE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAEK,6BAAO,GAAb;oEACE,cAAyC,EACzC,YAAoD,EACpD,EAGiD;;YAJjD,6BAAA,EAAA,iBAAoD;gBACpD,qBAG+C,EAAE,KAAA,EAF/C,oCAC+B,EAD/B,4BAA4B,mBAAG,IAAI,CAAC,aAAa;iBAC9C,4BAA4B,KAAA;;gBAG3B,iBAAiB,GAAG,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,iBAAiB,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;gBACnD,CAAC;gBAEK,qBAAqB,GAAG,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,aAAa,CAAC,wBAAwB,KAAK,IAAI,EAAE,CAAC;oBACzD,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;gBAC5C,CAAC;gBAEK,WAAW,yCAAQ,YAAY,GAAK,qBAAqB,CAAE,CAAC;gBAE5D,wBAAwB,GAAG;oBAC/B,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,gCAAwB,CAAC;iBAChE,CAAC;gBAEI,qBAAqB,GAAG,IAAA,gCAAwB,EAAC,WAAW,CAAC,CAAC;gBAEpE,sBAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CAAC,IAAI,EACjB;wBACE,YAAY;wBACZ,wBAAwB;wBACxB,qBAAqB;wBACrB,iBAAiB;qBAClB,EACD,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,CACvB,EAAC;;;KACtC;IACH,kBAAC;AAAD,CAAC,AArDD,IAqDC"} \ No newline at end of file diff --git a/lib/Typesense/Operations.d.ts b/lib/Typesense/Operations.d.ts deleted file mode 100644 index 058d4737..00000000 --- a/lib/Typesense/Operations.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import ApiCall from "./ApiCall"; -export default class Operations { - private apiCall; - constructor(apiCall: ApiCall); - perform(operationName: "vote" | "snapshot" | "cache/clear" | (string & {}), queryParameters?: Record): Promise; -} diff --git a/lib/Typesense/Operations.js b/lib/Typesense/Operations.js deleted file mode 100644 index b440cd3a..00000000 --- a/lib/Typesense/Operations.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/operations"; -var Operations = /** @class */ (function () { - function Operations(apiCall) { - this.apiCall = apiCall; - } - Operations.prototype.perform = function (operationName_1) { - return tslib_1.__awaiter(this, arguments, void 0, function ( - // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}` - operationName, queryParameters) { - if (queryParameters === void 0) { queryParameters = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.post("".concat(RESOURCEPATH, "/").concat(operationName), {}, queryParameters)]; - }); - }); - }; - return Operations; -}()); -exports.default = Operations; -//# sourceMappingURL=Operations.js.map \ No newline at end of file diff --git a/lib/Typesense/Operations.js.map b/lib/Typesense/Operations.js.map deleted file mode 100644 index 4d556771..00000000 --- a/lib/Typesense/Operations.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Operations.js","sourceRoot":"","sources":["../../src/Typesense/Operations.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,aAAa,CAAC;AAEnC;IACE,oBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,4BAAO,GAAb;;QACE,oHAAoH;QACpH,aAAkE,EAClE,eAAyC;YAAzC,gCAAA,EAAA,oBAAyC;;gBAEzC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,UAAG,YAAY,cAAI,aAAa,CAAE,EAClC,EAAE,EACF,eAAe,CAChB,EAAC;;;KACH;IACH,iBAAC;AAAD,CAAC,AAdD,IAcC"} \ No newline at end of file diff --git a/lib/Typesense/Override.d.ts b/lib/Typesense/Override.d.ts deleted file mode 100644 index ee1d99c7..00000000 --- a/lib/Typesense/Override.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import ApiCall from "./ApiCall"; -import { OverrideCreateSchema } from "./Overrides"; -export interface OverrideSchema extends OverrideCreateSchema { - id: string; -} -export interface OverrideDeleteSchema { - id: string; -} -export default class Override { - private collectionName; - private overrideId; - private apiCall; - constructor(collectionName: string, overrideId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} diff --git a/lib/Typesense/Override.js b/lib/Typesense/Override.js deleted file mode 100644 index a2e07e2f..00000000 --- a/lib/Typesense/Override.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var Overrides_1 = tslib_1.__importDefault(require("./Overrides")); -var Override = /** @class */ (function () { - function Override(collectionName, overrideId, apiCall) { - this.collectionName = collectionName; - this.overrideId = overrideId; - this.apiCall = apiCall; - } - Override.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Override.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Override.prototype.endpointPath = function () { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Overrides_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.overrideId)); - }; - return Override; -}()); -exports.default = Override; -//# sourceMappingURL=Override.js.map \ No newline at end of file diff --git a/lib/Typesense/Override.js.map b/lib/Typesense/Override.js.map deleted file mode 100644 index 43ae48f8..00000000 --- a/lib/Typesense/Override.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Override.js","sourceRoot":"","sources":["../../src/Typesense/Override.ts"],"names":[],"mappings":";;;AACA,sEAAwC;AACxC,kEAA8D;AAU9D;IACE,kBACU,cAAsB,EACtB,UAAkB,EAClB,OAAgB;QAFhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,2BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAiB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC9D;IAEK,yBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEO,+BAAY,GAApB;QACE,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAG,mBAAS,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAE,CAAC;IAClJ,CAAC;IACH,eAAC;AAAD,CAAC,AAlBD,IAkBC"} \ No newline at end of file diff --git a/lib/Typesense/Overrides.d.ts b/lib/Typesense/Overrides.d.ts deleted file mode 100644 index 1c36b336..00000000 --- a/lib/Typesense/Overrides.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ApiCall from "./ApiCall"; -import { OverrideSchema } from "./Override"; -export interface OverrideRuleQuerySchema { - query?: string; - match?: "exact" | "contains"; -} -export interface OverrideRuleFilterSchema { - filter_by?: string; -} -export interface OverrideRuleTagsSchema { - tags?: string[]; -} -export interface OverrideCreateSchema { - rule: OverrideRuleQuerySchema & OverrideRuleFilterSchema & OverrideRuleTagsSchema; - filter_by?: string; - sort_by?: string; - remove_matched_tokens?: boolean; - replace_query?: string; - includes?: Array<{ - id: string; - position: number; - }>; - excludes?: Array<{ - id: string; - }>; - filter_curated_hits?: boolean; - effective_from_ts?: number; - effective_to_ts?: number; - stop_processing?: boolean; - metadata?: object; -} -export interface OverridesRetrieveSchema { - overrides: OverrideSchema[]; -} -export default class Overrides { - private collectionName; - private apiCall; - constructor(collectionName: string, apiCall: ApiCall); - upsert(overrideId: string, params: OverrideCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/Overrides.js b/lib/Typesense/Overrides.js deleted file mode 100644 index 503c47c1..00000000 --- a/lib/Typesense/Overrides.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var RESOURCEPATH = "/overrides"; -var Overrides = /** @class */ (function () { - function Overrides(collectionName, apiCall) { - this.collectionName = collectionName; - this.apiCall = apiCall; - } - Overrides.prototype.upsert = function (overrideId, params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(overrideId), params)]; - }); - }); - }; - Overrides.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Overrides.prototype.endpointPath = function (operation) { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(this.collectionName).concat(Overrides.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(Overrides, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Overrides; -}()); -exports.default = Overrides; -//# sourceMappingURL=Overrides.js.map \ No newline at end of file diff --git a/lib/Typesense/Overrides.js.map b/lib/Typesense/Overrides.js.map deleted file mode 100644 index a7ac0700..00000000 --- a/lib/Typesense/Overrides.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Overrides.js","sourceRoot":"","sources":["../../src/Typesense/Overrides.ts"],"names":[],"mappings":";;;AACA,sEAAwC;AAGxC,IAAM,YAAY,GAAG,YAAY,CAAC;AAuClC;IACE,mBACU,cAAsB,EACtB,OAAgB;QADhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,0BAAM,GAAZ,UACE,UAAkB,EAClB,MAA4B;;;gBAE5B,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAC7B,MAAM,CACP,EAAC;;;KACH;IAEK,4BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEO,gCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,IAAI,CAAC,cAAc,SACvD,SAAS,CAAC,YAAY,SACrB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAE,CAAC;IAC1E,CAAC;IAED,sBAAW,yBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,gBAAC;AAAD,CAAC,AA7BD,IA6BC"} \ No newline at end of file diff --git a/lib/Typesense/Preset.d.ts b/lib/Typesense/Preset.d.ts deleted file mode 100644 index f9a9415f..00000000 --- a/lib/Typesense/Preset.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import ApiCall from "./ApiCall"; -import { PresetCreateSchema } from "./Presets"; -export interface PresetSchema extends PresetCreateSchema { - name: string; -} -export interface PresetDeleteSchema { - name: string; -} -export default class Preset { - private presetId; - private apiCall; - constructor(presetId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} diff --git a/lib/Typesense/Preset.js b/lib/Typesense/Preset.js deleted file mode 100644 index 1f9f7d84..00000000 --- a/lib/Typesense/Preset.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Presets_1 = tslib_1.__importDefault(require("./Presets")); -var Preset = /** @class */ (function () { - function Preset(presetId, apiCall) { - this.presetId = presetId; - this.apiCall = apiCall; - } - Preset.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Preset.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Preset.prototype.endpointPath = function () { - return "".concat(Presets_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.presetId)); - }; - return Preset; -}()); -exports.default = Preset; -//# sourceMappingURL=Preset.js.map \ No newline at end of file diff --git a/lib/Typesense/Preset.js.map b/lib/Typesense/Preset.js.map deleted file mode 100644 index a1d77dcb..00000000 --- a/lib/Typesense/Preset.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Preset.js","sourceRoot":"","sources":["../../src/Typesense/Preset.ts"],"names":[],"mappings":";;;AACA,8DAAwD;AAUxD;IACE,gBAAoB,QAAgB,EAAU,OAAgB;QAA1C,aAAQ,GAAR,QAAQ,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAE5D,yBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAe,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC5D;IAEK,uBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAqB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACrE;IAEO,6BAAY,GAApB;QACE,OAAO,UAAG,iBAAO,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAE,CAAC;IACxE,CAAC;IACH,aAAC;AAAD,CAAC,AAdD,IAcC"} \ No newline at end of file diff --git a/lib/Typesense/Presets.d.ts b/lib/Typesense/Presets.d.ts deleted file mode 100644 index 83491421..00000000 --- a/lib/Typesense/Presets.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import ApiCall from "./ApiCall"; -import { PresetSchema } from "./Preset"; -import { SearchParams } from "./Documents"; -import { MultiSearchRequestsSchema } from "./MultiSearch"; -export interface PresetCreateSchema { - value: SearchParams | MultiSearchRequestsSchema; -} -export interface PresetsRetrieveSchema { - presets: PresetSchema[]; -} -export default class Presets { - private apiCall; - constructor(apiCall: ApiCall); - upsert(presetId: string, params: PresetCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/Presets.js b/lib/Typesense/Presets.js deleted file mode 100644 index c780d6e0..00000000 --- a/lib/Typesense/Presets.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Utils_1 = require("./Utils"); -var RESOURCEPATH = "/presets"; -var Presets = /** @class */ (function () { - function Presets(apiCall) { - this.apiCall = apiCall; - } - Presets.prototype.upsert = function (presetId, params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var normalizedParams_1, normalizedParams; - return tslib_1.__generator(this, function (_a) { - if (typeof params.value === "object" && "searches" in params.value) { - normalizedParams_1 = params.value.searches.map(function (search) { - return (0, Utils_1.normalizeArrayableParams)(search); - }); - return [2 /*return*/, this.apiCall.put(this.endpointPath(presetId), { - value: { searches: normalizedParams_1 }, - })]; - } - normalizedParams = (0, Utils_1.normalizeArrayableParams)(params.value); - return [2 /*return*/, this.apiCall.put(this.endpointPath(presetId), { - value: normalizedParams, - })]; - }); - }); - }; - Presets.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Presets.prototype.endpointPath = function (operation) { - return "".concat(Presets.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(Presets, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Presets; -}()); -exports.default = Presets; -//# sourceMappingURL=Presets.js.map \ No newline at end of file diff --git a/lib/Typesense/Presets.js.map b/lib/Typesense/Presets.js.map deleted file mode 100644 index 3d57b2a6..00000000 --- a/lib/Typesense/Presets.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Presets.js","sourceRoot":"","sources":["../../src/Typesense/Presets.ts"],"names":[],"mappings":";;;AAIA,iCAAmD;AAEnD,IAAM,YAAY,GAAG,UAAU,CAAC;AAUhC;IACE,iBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,wBAAM,GAAZ,UACE,QAAgB,EAChB,MAA0B;;;;gBAE1B,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC7D,qBAAmB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,MAAM;wBACxD,OAAA,IAAA,gCAAwB,EAAC,MAAM,CAAC;oBAAhC,CAAgC,CACjC,CAAC;oBAEF,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAe,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;4BACjE,KAAK,EAAE,EAAE,QAAQ,EAAE,kBAAgB,EAAE;yBACtC,CAAC,EAAC;gBACL,CAAC;gBACK,gBAAgB,GAAG,IAAA,gCAAwB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEhE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAe,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;wBACjE,KAAK,EAAE,gBAAgB;qBACxB,CAAC,EAAC;;;KACJ;IAEK,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACrE;IAEO,8BAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,OAAO,CAAC,YAAY,SAC5B,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,uBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,cAAC;AAAD,CAAC,AApCD,IAoCC"} \ No newline at end of file diff --git a/lib/Typesense/RequestWithCache.d.ts b/lib/Typesense/RequestWithCache.d.ts deleted file mode 100644 index c03b6473..00000000 --- a/lib/Typesense/RequestWithCache.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export default class RequestWithCache { - private responseCache; - private responsePromiseCache; - clearCache(): void; - perform(requestContext: any, requestFunction: (...params: any) => unknown, requestFunctionArguments: any[], cacheOptions: CacheOptions): Promise; -} -interface CacheOptions { - cacheResponseForSeconds?: number; - maxSize?: number; -} -export {}; diff --git a/lib/Typesense/RequestWithCache.js b/lib/Typesense/RequestWithCache.js deleted file mode 100644 index 201b67a1..00000000 --- a/lib/Typesense/RequestWithCache.js +++ /dev/null @@ -1,88 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var defaultCacheResponseForSeconds = 2 * 60; -var defaultMaxSize = 100; -var RequestWithCache = /** @class */ (function () { - function RequestWithCache() { - this.responseCache = new Map(); - this.responsePromiseCache = new Map(); - } - RequestWithCache.prototype.clearCache = function () { - this.responseCache = new Map(); - this.responsePromiseCache = new Map(); - }; - // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way - RequestWithCache.prototype.perform = function (requestContext, requestFunction, requestFunctionArguments, cacheOptions) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a, cacheResponseForSeconds, _b, maxSize, isCacheDisabled, requestFunctionArgumentsJSON, cacheEntry, now, isEntryValid, cachePromiseEntry, isEntryValid, responsePromise, response, isCacheOverMaxSize, oldestEntry, isResponsePromiseCacheOverMaxSize, oldestEntry; - return tslib_1.__generator(this, function (_c) { - switch (_c.label) { - case 0: - _a = cacheOptions.cacheResponseForSeconds, cacheResponseForSeconds = _a === void 0 ? defaultCacheResponseForSeconds : _a, _b = cacheOptions.maxSize, maxSize = _b === void 0 ? defaultMaxSize : _b; - isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0; - if (isCacheDisabled) { - return [2 /*return*/, requestFunction.call.apply(requestFunction, tslib_1.__spreadArray([requestContext], requestFunctionArguments, false))]; - } - requestFunctionArgumentsJSON = JSON.stringify(requestFunctionArguments); - cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON); - now = Date.now(); - if (cacheEntry) { - isEntryValid = now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000; - if (isEntryValid) { - this.responseCache.delete(requestFunctionArgumentsJSON); - this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry); - return [2 /*return*/, Promise.resolve(cacheEntry.response)]; - } - else { - this.responseCache.delete(requestFunctionArgumentsJSON); - } - } - cachePromiseEntry = this.responsePromiseCache.get(requestFunctionArgumentsJSON); - if (cachePromiseEntry) { - isEntryValid = now - cachePromiseEntry.requestTimestamp < - cacheResponseForSeconds * 1000; - if (isEntryValid) { - this.responsePromiseCache.delete(requestFunctionArgumentsJSON); - this.responsePromiseCache.set(requestFunctionArgumentsJSON, cachePromiseEntry); - return [2 /*return*/, cachePromiseEntry.responsePromise]; - } - else { - this.responsePromiseCache.delete(requestFunctionArgumentsJSON); - } - } - responsePromise = requestFunction.call.apply(requestFunction, tslib_1.__spreadArray([requestContext], requestFunctionArguments, false)); - this.responsePromiseCache.set(requestFunctionArgumentsJSON, { - requestTimestamp: now, - responsePromise: responsePromise, - }); - return [4 /*yield*/, responsePromise]; - case 1: - response = _c.sent(); - this.responseCache.set(requestFunctionArgumentsJSON, { - requestTimestamp: now, - response: response, - }); - isCacheOverMaxSize = this.responseCache.size > maxSize; - if (isCacheOverMaxSize) { - oldestEntry = this.responseCache.keys().next().value; - if (oldestEntry) { - this.responseCache.delete(oldestEntry); - } - } - isResponsePromiseCacheOverMaxSize = this.responsePromiseCache.size > maxSize; - if (isResponsePromiseCacheOverMaxSize) { - oldestEntry = this.responsePromiseCache.keys().next().value; - if (oldestEntry) { - this.responsePromiseCache.delete(oldestEntry); - } - } - return [2 /*return*/, response]; - } - }); - }); - }; - return RequestWithCache; -}()); -exports.default = RequestWithCache; -//# sourceMappingURL=RequestWithCache.js.map \ No newline at end of file diff --git a/lib/Typesense/RequestWithCache.js.map b/lib/Typesense/RequestWithCache.js.map deleted file mode 100644 index ef7266ff..00000000 --- a/lib/Typesense/RequestWithCache.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"RequestWithCache.js","sourceRoot":"","sources":["../../src/Typesense/RequestWithCache.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/SearchClient.d.ts b/lib/Typesense/SearchClient.d.ts deleted file mode 100644 index cee519ea..00000000 --- a/lib/Typesense/SearchClient.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ConfigurationOptions } from "./Configuration"; -import MultiSearch from "./MultiSearch"; -import { DocumentSchema } from "./Documents"; -import { SearchOnlyCollection } from "./SearchOnlyCollection"; -export default class SearchClient { - readonly multiSearch: MultiSearch; - private readonly configuration; - private readonly apiCall; - private readonly individualCollections; - constructor(options: ConfigurationOptions); - clearCache(): void; - collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; -} diff --git a/lib/Typesense/SearchClient.js b/lib/Typesense/SearchClient.js deleted file mode 100644 index d8de0e03..00000000 --- a/lib/Typesense/SearchClient.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Configuration_1 = tslib_1.__importDefault(require("./Configuration")); -var ApiCall_1 = tslib_1.__importDefault(require("./ApiCall")); -var MultiSearch_1 = tslib_1.__importDefault(require("./MultiSearch")); -var SearchOnlyCollection_1 = require("./SearchOnlyCollection"); -var SearchClient = /** @class */ (function () { - function SearchClient(options) { - var _a; - options.sendApiKeyAsQueryParam = (_a = options.sendApiKeyAsQueryParam) !== null && _a !== void 0 ? _a : true; - if (options.sendApiKeyAsQueryParam === true && - (options.apiKey || "").length > 2000) { - console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."); - options.sendApiKeyAsQueryParam = false; - } - this.configuration = new Configuration_1.default(options); - this.apiCall = new ApiCall_1.default(this.configuration); - this.multiSearch = new MultiSearch_1.default(this.apiCall, this.configuration, true); - this.individualCollections = {}; - } - SearchClient.prototype.clearCache = function () { - this.multiSearch.clearCache(); - // eslint-disable-next-line @typescript-eslint/no-unused-vars - Object.entries(this.individualCollections).forEach(function (_a) { - var _ = _a[0], collection = _a[1]; - collection.documents().clearCache(); - }); - }; - SearchClient.prototype.collections = function (collectionName) { - if (!collectionName) { - throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to " + - "be searched must be specified. Use Typesense.Client if you need to access the collection object."); - } - else { - if (this.individualCollections[collectionName] === undefined) { - this.individualCollections[collectionName] = new SearchOnlyCollection_1.SearchOnlyCollection(collectionName, this.apiCall, this.configuration); - } - return this.individualCollections[collectionName]; - } - }; - return SearchClient; -}()); -exports.default = SearchClient; -//# sourceMappingURL=SearchClient.js.map \ No newline at end of file diff --git a/lib/Typesense/SearchClient.js.map b/lib/Typesense/SearchClient.js.map deleted file mode 100644 index 1aa2a26e..00000000 --- a/lib/Typesense/SearchClient.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"SearchClient.js","sourceRoot":"","sources":["../../src/Typesense/SearchClient.ts"],"names":[],"mappings":";;;AAAA,0EAAsE;AACtE,8DAAgC;AAChC,sEAAwC;AAExC,+DAA8D;AAE9D;IAME,sBAAY,OAA6B;;QACvC,OAAO,CAAC,sBAAsB,GAAG,MAAA,OAAO,CAAC,sBAAsB,mCAAI,IAAI,CAAC;QACxE,IACE,OAAO,CAAC,sBAAsB,KAAK,IAAI;YACvC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI,EACpC,CAAC;YACD,OAAO,CAAC,IAAI,CACV,mIAAmI,CACpI,CAAC;YACF,OAAO,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,uBAAa,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,iCAAU,GAAV;QACE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAE9B,6DAA6D;QAC7D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,UAAC,EAAe;gBAAd,CAAC,QAAA,EAAE,UAAU,QAAA;YAChE,UAAU,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kCAAW,GAAX,UACE,cAAsB;QAEtB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,8FAA8F;gBAC5F,kGAAkG,CACrG,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7D,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,GAAG,IAAI,2CAAoB,CACnE,cAAc,EACd,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,CACnB,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACH,mBAAC;AAAD,CAAC,AApDD,IAoDC"} \ No newline at end of file diff --git a/lib/Typesense/SearchOnlyCollection.d.ts b/lib/Typesense/SearchOnlyCollection.d.ts deleted file mode 100644 index c74fb562..00000000 --- a/lib/Typesense/SearchOnlyCollection.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { DocumentSchema, SearchableDocuments } from "./Documents"; -import ApiCall from "./ApiCall"; -export declare class SearchOnlyCollection { - private readonly name; - private readonly apiCall; - private readonly configuration; - private readonly _documents; - constructor(name: string, apiCall: ApiCall, configuration: any); - documents(): SearchableDocuments; -} diff --git a/lib/Typesense/SearchOnlyCollection.js b/lib/Typesense/SearchOnlyCollection.js deleted file mode 100644 index 3c41aca0..00000000 --- a/lib/Typesense/SearchOnlyCollection.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SearchOnlyCollection = void 0; -var SearchOnlyDocuments_1 = require("./SearchOnlyDocuments"); -var SearchOnlyCollection = /** @class */ (function () { - function SearchOnlyCollection(name, apiCall, configuration) { - this.name = name; - this.apiCall = apiCall; - this.configuration = configuration; - this._documents = new SearchOnlyDocuments_1.SearchOnlyDocuments(this.name, this.apiCall, this.configuration); - } - SearchOnlyCollection.prototype.documents = function () { - return this._documents; - }; - return SearchOnlyCollection; -}()); -exports.SearchOnlyCollection = SearchOnlyCollection; -//# sourceMappingURL=SearchOnlyCollection.js.map \ No newline at end of file diff --git a/lib/Typesense/SearchOnlyCollection.js.map b/lib/Typesense/SearchOnlyCollection.js.map deleted file mode 100644 index c52e0a87..00000000 --- a/lib/Typesense/SearchOnlyCollection.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"SearchOnlyCollection.js","sourceRoot":"","sources":["../../src/Typesense/SearchOnlyCollection.ts"],"names":[],"mappings":";;;AAEA,6DAA4D;AAE5D;IAGE,8BACmB,IAAY,EACZ,OAAgB,EAChB,aAAkB;QAFlB,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAAK;QAEnC,IAAI,CAAC,UAAU,GAAG,IAAI,yCAAmB,CACvC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,CACnB,CAAC;IACJ,CAAC;IAED,wCAAS,GAAT;QACE,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACH,2BAAC;AAAD,CAAC,AAlBD,IAkBC;AAlBY,oDAAoB"} \ No newline at end of file diff --git a/lib/Typesense/SearchOnlyDocuments.d.ts b/lib/Typesense/SearchOnlyDocuments.d.ts deleted file mode 100644 index 93453b0a..00000000 --- a/lib/Typesense/SearchOnlyDocuments.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import RequestWithCache from "./RequestWithCache"; -import ApiCall from "./ApiCall"; -import Configuration from "./Configuration"; -import type { DocumentSchema, SearchableDocuments, SearchOptions, SearchParams, SearchParamsWithPreset, SearchResponse } from "./Documents"; -export declare class SearchOnlyDocuments implements SearchableDocuments { - protected collectionName: string; - protected apiCall: ApiCall; - protected configuration: Configuration; - protected requestWithCache: RequestWithCache; - constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); - clearCache(): void; - search(searchParameters: SearchParams | SearchParamsWithPreset, { cacheSearchResultsForSeconds, abortSignal, }?: SearchOptions): Promise>; - protected endpointPath(operation?: string): string; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/SearchOnlyDocuments.js b/lib/Typesense/SearchOnlyDocuments.js deleted file mode 100644 index 11aa915e..00000000 --- a/lib/Typesense/SearchOnlyDocuments.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SearchOnlyDocuments = void 0; -var tslib_1 = require("tslib"); -var RequestWithCache_1 = tslib_1.__importDefault(require("./RequestWithCache")); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var Utils_1 = require("./Utils"); -var RESOURCEPATH = "/documents"; -var SearchOnlyDocuments = /** @class */ (function () { - function SearchOnlyDocuments(collectionName, apiCall, configuration) { - this.collectionName = collectionName; - this.apiCall = apiCall; - this.configuration = configuration; - this.requestWithCache = new RequestWithCache_1.default(); - } - SearchOnlyDocuments.prototype.clearCache = function () { - this.requestWithCache.clearCache(); - }; - SearchOnlyDocuments.prototype.search = function (searchParameters_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (searchParameters, _a) { - var additionalQueryParams, normalizedParams, queryParams; - var _b = _a === void 0 ? {} : _a, _c = _b.cacheSearchResultsForSeconds, cacheSearchResultsForSeconds = _c === void 0 ? this.configuration - .cacheSearchResultsForSeconds : _c, _d = _b.abortSignal, abortSignal = _d === void 0 ? null : _d; - return tslib_1.__generator(this, function (_e) { - additionalQueryParams = {}; - if (this.configuration.useServerSideSearchCache === true) { - additionalQueryParams["use_cache"] = true; - } - normalizedParams = (0, Utils_1.normalizeArrayableParams)(searchParameters); - queryParams = Object.assign({}, additionalQueryParams, normalizedParams); - return [2 /*return*/, this.requestWithCache.perform(this.apiCall, this.apiCall.get, [this.endpointPath("search"), queryParams, { abortSignal: abortSignal }], { - cacheResponseForSeconds: cacheSearchResultsForSeconds, - })]; - }); - }); - }; - SearchOnlyDocuments.prototype.endpointPath = function (operation) { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(this.collectionName).concat(RESOURCEPATH).concat(operation === undefined ? "" : "/" + operation); - }; - Object.defineProperty(SearchOnlyDocuments, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return SearchOnlyDocuments; -}()); -exports.SearchOnlyDocuments = SearchOnlyDocuments; -//# sourceMappingURL=SearchOnlyDocuments.js.map \ No newline at end of file diff --git a/lib/Typesense/SearchOnlyDocuments.js.map b/lib/Typesense/SearchOnlyDocuments.js.map deleted file mode 100644 index 7a91533a..00000000 --- a/lib/Typesense/SearchOnlyDocuments.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"SearchOnlyDocuments.js","sourceRoot":"","sources":["../../src/Typesense/SearchOnlyDocuments.ts"],"names":[],"mappings":";;;;AAAA,gFAAkD;AAGlD,sEAAwC;AASxC,iCAAmD;AAEnD,IAAM,YAAY,GAAG,YAAY,CAAC;AAElC;IAKE,6BACY,cAAsB,EACtB,OAAgB,EAChB,aAA4B;QAF5B,mBAAc,GAAd,cAAc,CAAQ;QACtB,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAAe;QAL9B,qBAAgB,GAAqB,IAAI,0BAAgB,EAAE,CAAC;IAMnE,CAAC;IAEJ,wCAAU,GAAV;QACE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAEK,oCAAM,GAAZ;oEACE,gBAAuD,EACvD,EAIqB;;gBAJrB,qBAImB,EAAE,KAAA,EAHnB,oCAC+B,EAD/B,4BAA4B,mBAAG,IAAI,CAAC,aAAa;iBAC9C,4BAA4B,KAAA,EAC/B,mBAAkB,EAAlB,WAAW,mBAAG,IAAI,KAAA;;gBAGd,qBAAqB,GAAG,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,aAAa,CAAC,wBAAwB,KAAK,IAAI,EAAE,CAAC;oBACzD,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;gBAC5C,CAAC;gBACK,gBAAgB,GAAG,IAAA,gCAAwB,EAAC,gBAAgB,CAAC,CAAC;gBAC9D,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,EAAE,EACF,qBAAqB,EACrB,gBAAgB,CACjB,CAAC;gBAEF,sBAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAChB,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,EAAE,WAAW,aAAA,EAAE,CAAC,EAC3D;wBACE,uBAAuB,EAAE,4BAA4B;qBACtD,CAC4B,EAAC;;;KACjC;IAES,0CAAY,GAAtB,UAAuB,SAAkB;QACvC,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,IAAI,CAAC,cAAc,SAAG,YAAY,SACtE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAC9C,CAAC;IACL,CAAC;IAED,sBAAW,mCAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,0BAAC;AAAD,CAAC,AArDD,IAqDC;AArDY,kDAAmB"} \ No newline at end of file diff --git a/lib/Typesense/Stats.d.ts b/lib/Typesense/Stats.d.ts deleted file mode 100644 index a3a0ad2f..00000000 --- a/lib/Typesense/Stats.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import ApiCall from "./ApiCall"; -export interface EndpointStats { - [endpoint: string]: number; -} -export interface StatsResponse { - delete_latency_ms?: number; - delete_requests_per_second?: number; - import_latency_ms?: number; - import_requests_per_second?: number; - latency_ms?: EndpointStats; - overloaded_requests_per_second?: number; - pending_write_batches?: number; - requests_per_second?: EndpointStats; - search_latency_ms?: number; - search_requests_per_second?: number; - total_requests_per_second?: number; - write_latency_ms?: number; - write_requests_per_second?: number; -} -export default class Metrics { - private apiCall; - constructor(apiCall: ApiCall); - retrieve(): Promise; -} diff --git a/lib/Typesense/Stats.js b/lib/Typesense/Stats.js deleted file mode 100644 index f00c45d8..00000000 --- a/lib/Typesense/Stats.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/stats.json"; -var Metrics = /** @class */ (function () { - function Metrics(apiCall) { - this.apiCall = apiCall; - } - Metrics.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - return Metrics; -}()); -exports.default = Metrics; -//# sourceMappingURL=Stats.js.map \ No newline at end of file diff --git a/lib/Typesense/Stats.js.map b/lib/Typesense/Stats.js.map deleted file mode 100644 index d45c873b..00000000 --- a/lib/Typesense/Stats.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Stats.js","sourceRoot":"","sources":["../../src/Typesense/Stats.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,aAAa,CAAC;AAsBnC;IACE,iBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC;;;KACvC;IACH,cAAC;AAAD,CAAC,AAND,IAMC"} \ No newline at end of file diff --git a/lib/Typesense/Stopword.d.ts b/lib/Typesense/Stopword.d.ts deleted file mode 100644 index 3a74c588..00000000 --- a/lib/Typesense/Stopword.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import ApiCall from "./ApiCall"; -import { StopwordCreateSchema } from "./Stopwords"; -export interface StopwordSchema extends StopwordCreateSchema { - id: string; - stopwords: string[]; - locale?: string; -} -export interface StopwordDeleteSchema { - id: string; -} -export default class Stopword { - private stopwordId; - private apiCall; - constructor(stopwordId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} diff --git a/lib/Typesense/Stopword.js b/lib/Typesense/Stopword.js deleted file mode 100644 index 83547225..00000000 --- a/lib/Typesense/Stopword.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Stopwords_1 = tslib_1.__importDefault(require("./Stopwords")); -var Stopword = /** @class */ (function () { - function Stopword(stopwordId, apiCall) { - this.stopwordId = stopwordId; - this.apiCall = apiCall; - } - Stopword.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Stopword.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Stopword.prototype.endpointPath = function () { - return "".concat(Stopwords_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.stopwordId)); - }; - return Stopword; -}()); -exports.default = Stopword; -//# sourceMappingURL=Stopword.js.map \ No newline at end of file diff --git a/lib/Typesense/Stopword.js.map b/lib/Typesense/Stopword.js.map deleted file mode 100644 index 9523cdce..00000000 --- a/lib/Typesense/Stopword.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Stopword.js","sourceRoot":"","sources":["../../src/Typesense/Stopword.ts"],"names":[],"mappings":";;;AACA,kEAA8D;AAY9D;IACE,kBACU,UAAkB,EAClB,OAAgB;QADhB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,2BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAiB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC9D;IAEK,yBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEO,+BAAY,GAApB;QACE,OAAO,UAAG,mBAAS,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAE,CAAC;IAC5E,CAAC;IACH,eAAC;AAAD,CAAC,AAjBD,IAiBC"} \ No newline at end of file diff --git a/lib/Typesense/Stopwords.d.ts b/lib/Typesense/Stopwords.d.ts deleted file mode 100644 index 3d119c1f..00000000 --- a/lib/Typesense/Stopwords.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import ApiCall from "./ApiCall"; -import { StopwordSchema } from "./Stopword"; -export interface StopwordCreateSchema { - stopwords: string[]; - locale?: string; -} -export interface StopwordsRetrieveSchema { - stopwords: StopwordSchema[]; -} -export default class Stopwords { - private apiCall; - constructor(apiCall: ApiCall); - upsert(stopwordId: string, params: StopwordCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/Stopwords.js b/lib/Typesense/Stopwords.js deleted file mode 100644 index 6caff949..00000000 --- a/lib/Typesense/Stopwords.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/stopwords"; -var Stopwords = /** @class */ (function () { - function Stopwords(apiCall) { - this.apiCall = apiCall; - } - Stopwords.prototype.upsert = function (stopwordId, params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(stopwordId), params)]; - }); - }); - }; - Stopwords.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Stopwords.prototype.endpointPath = function (operation) { - return "".concat(Stopwords.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(Stopwords, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Stopwords; -}()); -exports.default = Stopwords; -//# sourceMappingURL=Stopwords.js.map \ No newline at end of file diff --git a/lib/Typesense/Stopwords.js.map b/lib/Typesense/Stopwords.js.map deleted file mode 100644 index f02de760..00000000 --- a/lib/Typesense/Stopwords.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Stopwords.js","sourceRoot":"","sources":["../../src/Typesense/Stopwords.ts"],"names":[],"mappings":";;;AAGA,IAAM,YAAY,GAAG,YAAY,CAAC;AAWlC;IACE,mBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,0BAAM,GAAZ,UACE,UAAkB,EAClB,MAA4B;;;gBAE5B,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAC7B,MAAM,CACP,EAAC;;;KACH;IAEK,4BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEO,gCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,SAAS,CAAC,YAAY,SAC9B,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,yBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,gBAAC;AAAD,CAAC,AA1BD,IA0BC"} \ No newline at end of file diff --git a/lib/Typesense/Synonym.d.ts b/lib/Typesense/Synonym.d.ts deleted file mode 100644 index e178a28b..00000000 --- a/lib/Typesense/Synonym.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import ApiCall from "./ApiCall"; -import { SynonymCreateSchema } from "./Synonyms"; -export interface SynonymSchema extends SynonymCreateSchema { - id: string; -} -export interface SynonymDeleteSchema { - id: string; -} -export default class Synonym { - private collectionName; - private synonymId; - private apiCall; - constructor(collectionName: string, synonymId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} diff --git a/lib/Typesense/Synonym.js b/lib/Typesense/Synonym.js deleted file mode 100644 index fb4830a7..00000000 --- a/lib/Typesense/Synonym.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var Synonyms_1 = tslib_1.__importDefault(require("./Synonyms")); -var Synonym = /** @class */ (function () { - function Synonym(collectionName, synonymId, apiCall) { - this.collectionName = collectionName; - this.synonymId = synonymId; - this.apiCall = apiCall; - } - Synonym.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Synonym.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Synonym.prototype.endpointPath = function () { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Synonyms_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.synonymId)); - }; - return Synonym; -}()); -exports.default = Synonym; -//# sourceMappingURL=Synonym.js.map \ No newline at end of file diff --git a/lib/Typesense/Synonym.js.map b/lib/Typesense/Synonym.js.map deleted file mode 100644 index 1278adf2..00000000 --- a/lib/Typesense/Synonym.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Synonym.js","sourceRoot":"","sources":["../../src/Typesense/Synonym.ts"],"names":[],"mappings":";;;AACA,sEAAwC;AACxC,gEAA2D;AAU3D;IACE,iBACU,cAAsB,EACtB,SAAiB,EACjB,OAAgB;QAFhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,cAAS,GAAT,SAAS,CAAQ;QACjB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAgB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC7D;IAEK,wBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAsB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACtE;IAEO,8BAAY,GAApB;QACE,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAG,kBAAQ,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAE,CAAC;IAChJ,CAAC;IACH,cAAC;AAAD,CAAC,AAlBD,IAkBC"} \ No newline at end of file diff --git a/lib/Typesense/Synonyms.d.ts b/lib/Typesense/Synonyms.d.ts deleted file mode 100644 index 82bfb1d6..00000000 --- a/lib/Typesense/Synonyms.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import ApiCall from "./ApiCall"; -import { SynonymSchema } from "./Synonym"; -export interface SynonymCreateSchema { - synonyms: string[]; - root?: string; - locale?: string; - symbols_to_index?: string[]; -} -export interface SynonymsRetrieveSchema { - synonyms: SynonymSchema[]; -} -export default class Synonyms { - private collectionName; - private apiCall; - constructor(collectionName: string, apiCall: ApiCall); - upsert(synonymId: string, params: SynonymCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} diff --git a/lib/Typesense/Synonyms.js b/lib/Typesense/Synonyms.js deleted file mode 100644 index cef6cb72..00000000 --- a/lib/Typesense/Synonyms.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var RESOURCEPATH = "/synonyms"; -var Synonyms = /** @class */ (function () { - function Synonyms(collectionName, apiCall) { - this.collectionName = collectionName; - this.apiCall = apiCall; - } - Synonyms.prototype.upsert = function (synonymId, params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(synonymId), params)]; - }); - }); - }; - Synonyms.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Synonyms.prototype.endpointPath = function (operation) { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Synonyms.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(Synonyms, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Synonyms; -}()); -exports.default = Synonyms; -//# sourceMappingURL=Synonyms.js.map \ No newline at end of file diff --git a/lib/Typesense/Synonyms.js.map b/lib/Typesense/Synonyms.js.map deleted file mode 100644 index 08c256ac..00000000 --- a/lib/Typesense/Synonyms.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Synonyms.js","sourceRoot":"","sources":["../../src/Typesense/Synonyms.ts"],"names":[],"mappings":";;;AACA,sEAAwC;AAGxC,IAAM,YAAY,GAAG,WAAW,CAAC;AAajC;IACE,kBAAoB,cAAsB,EAAU,OAAgB;QAAhD,mBAAc,GAAd,cAAc,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElE,yBAAM,GAAZ,UACE,SAAiB,EACjB,MAA2B;;;gBAE3B,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAC5B,MAAM,CACP,EAAC;;;KACH;IAEK,2BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAyB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACtE;IAEO,+BAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,SAC3E,QAAQ,CAAC,YAAY,SACpB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAE,CAAC;IAC1E,CAAC;IAED,sBAAW,wBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,eAAC;AAAD,CAAC,AA1BD,IA0BC"} \ No newline at end of file diff --git a/lib/Typesense/Utils.d.ts b/lib/Typesense/Utils.d.ts deleted file mode 100644 index 768c81c2..00000000 --- a/lib/Typesense/Utils.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { ExtractBaseTypes, SearchParams } from "./Documents"; -export declare function normalizeArrayableParams(params: T): Prettify>; -type Prettify = { - [K in keyof T]: T[K]; -} & {}; -export {}; diff --git a/lib/Typesense/Utils.js b/lib/Typesense/Utils.js deleted file mode 100644 index d5e5a8b6..00000000 --- a/lib/Typesense/Utils.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.normalizeArrayableParams = normalizeArrayableParams; -var tslib_1 = require("tslib"); -var Documents_1 = require("./Documents"); -function hasNoArrayValues(params) { - return Object.keys(Documents_1.arrayableParams) - .filter(function (key) { return params[key] !== undefined; }) - .every(function (key) { return isNonArrayValue(params[key]); }); -} -function normalizeArrayableParams(params) { - var result = tslib_1.__assign({}, params); - var transformedValues = Object.keys(Documents_1.arrayableParams) - .filter(function (key) { return Array.isArray(result[key]); }) - .map(function (key) { - result[key] = result[key].join(","); - return key; - }); - if (!transformedValues.length && hasNoArrayValues(result)) { - return result; - } - if (!hasNoArrayValues(result)) { - throw new Error("Failed to normalize arrayable params: ".concat(JSON.stringify(result))); - } - return result; -} -function isNonArrayValue(value) { - return !Array.isArray(value); -} -//# sourceMappingURL=Utils.js.map \ No newline at end of file diff --git a/lib/Typesense/Utils.js.map b/lib/Typesense/Utils.js.map deleted file mode 100644 index aba3aa09..00000000 --- a/lib/Typesense/Utils.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../src/Typesense/Utils.ts"],"names":[],"mappings":";;AAeA,4DAuBC;;AAtCD,yCAA8C;AAO9C,SAAS,gBAAgB,CACvB,MAA+B;IAE/B,OAAO,MAAM,CAAC,IAAI,CAAC,2BAAe,CAAC;SAChC,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAzB,CAAyB,CAAC;SAC1C,KAAK,CAAC,UAAC,GAAG,IAAK,OAAA,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAA5B,CAA4B,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,wBAAwB,CACtC,MAAS;IAET,IAAM,MAAM,wBAAQ,MAAM,CAAE,CAAC;IAE7B,IAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,2BAAe,CAAC;SACnD,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAA1B,CAA0B,CAAC;SAC3C,GAAG,CAAC,UAAC,GAAG;QACP,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEL,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,gDAAyC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAE,CAClE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACtB,KAAoC;IAEpC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"} \ No newline at end of file From e0eab4ff4b942b21625e12828dddea16ebd7204b Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Wed, 21 Aug 2024 11:39:47 +0300 Subject: [PATCH 02/45] build: add tsup build system Modernize build system and package configuration - Migrate from webpack to tsup for improved build process. - Update package.json with new exports configuration and dependencies. - Add tsup.config.ts for flexible bundling options. - Target both cjs and esm. - Use minified versions of bundle by default. --- dist/Typesense.d.mts | 1084 +++++++++++ dist/Typesense.d.ts | 1084 +++++++++++ dist/Typesense.min.js | 9 + dist/Typesense.min.js.map | 1 + dist/Typesense.min.mjs | 9 + dist/Typesense.min.mjs.map | 1 + lib/Typesense.d.mts | 1084 +++++++++++ lib/Typesense.d.ts | 1084 +++++++++++ lib/Typesense.min.js | 9 + lib/Typesense.min.js.map | 1 + lib/Typesense.min.mjs | 9 + lib/Typesense.min.mjs.map | 1 + package-lock.json | 1601 ++++++++++++++++- package.json | 20 +- tsup.config.ts | 48 + typesense-data/db/000009.sst | Bin 0 -> 2067 bytes typesense-data/db/CURRENT | 1 + typesense-data/db/IDENTITY | 1 + typesense-data/db/LOCK | 0 typesense-data/db/LOG | 721 ++++++++ typesense-data/db/MANIFEST-000005 | Bin 0 -> 178 bytes typesense-data/db/OPTIONS-000007 | 199 ++ typesense-data/meta/CURRENT | 1 + typesense-data/meta/IDENTITY | 1 + typesense-data/meta/LOCK | 0 typesense-data/meta/LOG | 683 +++++++ typesense-data/meta/MANIFEST-000005 | Bin 0 -> 59 bytes typesense-data/meta/OPTIONS-000007 | 199 ++ .../log/log_inprogress_00000000000000000001 | Bin 0 -> 890 bytes typesense-data/state/log/log_meta | Bin 0 -> 6 bytes typesense-data/state/meta/raft_meta | Bin 0 -> 28 bytes .../__raft_snapshot_meta | Bin 0 -> 150 bytes .../db_snapshot/000009.sst | Bin 0 -> 2067 bytes .../db_snapshot/CURRENT | 1 + .../db_snapshot/MANIFEST-000005 | Bin 0 -> 178 bytes .../db_snapshot/OPTIONS-000007 | 199 ++ 36 files changed, 8010 insertions(+), 41 deletions(-) create mode 100644 dist/Typesense.d.mts create mode 100644 dist/Typesense.d.ts create mode 100644 dist/Typesense.min.js create mode 100644 dist/Typesense.min.js.map create mode 100644 dist/Typesense.min.mjs create mode 100644 dist/Typesense.min.mjs.map create mode 100644 lib/Typesense.d.mts create mode 100644 lib/Typesense.d.ts create mode 100644 lib/Typesense.min.js create mode 100644 lib/Typesense.min.js.map create mode 100644 lib/Typesense.min.mjs create mode 100644 lib/Typesense.min.mjs.map create mode 100644 tsup.config.ts create mode 100644 typesense-data/db/000009.sst create mode 100644 typesense-data/db/CURRENT create mode 100644 typesense-data/db/IDENTITY create mode 100644 typesense-data/db/LOCK create mode 100644 typesense-data/db/LOG create mode 100644 typesense-data/db/MANIFEST-000005 create mode 100644 typesense-data/db/OPTIONS-000007 create mode 100644 typesense-data/meta/CURRENT create mode 100644 typesense-data/meta/IDENTITY create mode 100644 typesense-data/meta/LOCK create mode 100644 typesense-data/meta/LOG create mode 100644 typesense-data/meta/MANIFEST-000005 create mode 100644 typesense-data/meta/OPTIONS-000007 create mode 100644 typesense-data/state/log/log_inprogress_00000000000000000001 create mode 100644 typesense-data/state/log/log_meta create mode 100644 typesense-data/state/meta/raft_meta create mode 100644 typesense-data/state/snapshot/snapshot_00000000000000000002/__raft_snapshot_meta create mode 100644 typesense-data/state/snapshot/snapshot_00000000000000000002/db_snapshot/000009.sst create mode 100644 typesense-data/state/snapshot/snapshot_00000000000000000002/db_snapshot/CURRENT create mode 100644 typesense-data/state/snapshot/snapshot_00000000000000000002/db_snapshot/MANIFEST-000005 create mode 100644 typesense-data/state/snapshot/snapshot_00000000000000000002/db_snapshot/OPTIONS-000007 diff --git a/dist/Typesense.d.mts b/dist/Typesense.d.mts new file mode 100644 index 00000000..4654ff7a --- /dev/null +++ b/dist/Typesense.d.mts @@ -0,0 +1,1084 @@ +import { LogLevelDesc, Logger } from 'loglevel'; +import { Agent } from 'http'; +import { Agent as Agent$1 } from 'https'; +import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; +import { ReadStream } from 'fs'; + +interface NodeConfiguration { + host: string; + port: number; + protocol: string; + path?: string; + url?: string; +} +interface NodeConfigurationWithHostname { + host: string; + port: number; + protocol: string; + path?: string; +} +interface NodeConfigurationWithUrl { + url: string; +} +interface ConfigurationOptions { + apiKey: string; + nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + randomizeNodes?: boolean; + /** + * @deprecated + * masterNode is now consolidated to nodes, starting with Typesense Server v0.12' + */ + masterNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + /** + * @deprecated + * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12' + */ + readReplicaNodes?: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + connectionTimeoutSeconds?: number; + timeoutSeconds?: number; + healthcheckIntervalSeconds?: number; + numRetries?: number; + retryIntervalSeconds?: number; + sendApiKeyAsQueryParam?: boolean | undefined; + useServerSideSearchCache?: boolean; + cacheSearchResultsForSeconds?: number; + additionalHeaders?: Record; + logLevel?: LogLevelDesc; + logger?: Logger; + /** + * Set a custom HTTP Agent + * + * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors + * Usage: + * const { Agent: HTTPAgent } = require("http"); + * ... + * httpAgent: new HTTPAgent({ keepAlive: true }), + * @type {HTTPAgent} + */ + httpAgent?: Agent; + /** + * Set a custom HTTPS Agent + * + * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors + * Usage: + * const { Agent: HTTPSAgent } = require("https"); + * ... + * httpsAgent: new HTTPSAgent({ keepAlive: true }), + * @type {HTTPSAgent} + */ + httpsAgent?: Agent$1; + /** + * Set a custom paramsSerializer + * + * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config + * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397 + * @type {any} + */ + paramsSerializer?: any; +} +declare class Configuration { + readonly nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + readonly nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + readonly connectionTimeoutSeconds: number; + readonly healthcheckIntervalSeconds: number; + readonly numRetries: number; + readonly retryIntervalSeconds: number; + readonly apiKey: string; + readonly sendApiKeyAsQueryParam?: boolean; + readonly cacheSearchResultsForSeconds: number; + readonly useServerSideSearchCache: boolean; + readonly logger: Logger; + readonly logLevel: LogLevelDesc; + readonly additionalHeaders?: Record; + readonly httpAgent?: Agent; + readonly httpsAgent?: Agent$1; + readonly paramsSerializer?: any; + constructor(options: ConfigurationOptions); + validate(): boolean; + private validateNodes; + private isNodeMissingAnyParameters; + private setDefaultPathInNode; + private setDefaultPortInNode; + private showDeprecationWarnings; + private shuffleArray; +} + +declare class TypesenseError extends Error { + httpStatus?: number; + constructor(message?: string); +} + +interface Node extends NodeConfiguration { + isHealthy: boolean; + index: string | number; +} +declare class ApiCall { + private configuration; + private readonly apiKey; + private readonly nodes; + private readonly nearestNode; + private readonly connectionTimeoutSeconds; + private readonly healthcheckIntervalSeconds; + private readonly retryIntervalSeconds; + private readonly sendApiKeyAsQueryParam?; + private readonly numRetriesPerRequest; + private readonly additionalUserHeaders?; + private readonly logger; + private currentNodeIndex; + constructor(configuration: Configuration); + get(endpoint: string, queryParameters?: any, { abortSignal, responseType, }?: { + abortSignal?: any; + responseType?: AxiosRequestConfig["responseType"] | undefined; + }): Promise; + delete(endpoint: string, queryParameters?: any): Promise; + post(endpoint: string, bodyParameters?: any, queryParameters?: any, additionalHeaders?: any): Promise; + put(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + patch(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + performRequest(requestType: Method, endpoint: string, { queryParameters, bodyParameters, additionalHeaders, abortSignal, responseType, skipConnectionTimeout, enableKeepAlive, }: { + queryParameters?: any; + bodyParameters?: any; + additionalHeaders?: any; + abortSignal?: any; + responseType?: AxiosRequestConfig["responseType"] | undefined; + skipConnectionTimeout?: boolean; + enableKeepAlive?: boolean | undefined; + }): Promise; + getNextNode(requestNumber?: number): Node; + nodeDueForHealthcheck(node: any, requestNumber?: number): boolean; + initializeMetadataForNodes(): void; + setNodeHealthcheck(node: any, isHealthy: any): void; + uriFor(endpoint: string, node: any): string; + defaultHeaders(): any; + timer(seconds: any): Promise; + customErrorForResponse(response: AxiosResponse, messageFromServer: string): TypesenseError; +} + +declare class RequestWithCache { + private responseCache; + private responsePromiseCache; + clearCache(): void; + perform(requestContext: any, requestFunction: (...params: any) => unknown, requestFunctionArguments: any[], cacheOptions: CacheOptions): Promise; +} +interface CacheOptions { + cacheResponseForSeconds?: number; + maxSize?: number; +} + +declare class SearchOnlyDocuments implements SearchableDocuments { + protected collectionName: string; + protected apiCall: ApiCall; + protected configuration: Configuration; + protected requestWithCache: RequestWithCache; + constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); + clearCache(): void; + search(searchParameters: SearchParams | SearchParamsWithPreset, { cacheSearchResultsForSeconds, abortSignal, }?: SearchOptions): Promise>; + protected endpointPath(operation?: string): string; + static get RESOURCEPATH(): string; +} + +interface DeleteQuery { + filter_by?: string; + batch_size?: number; + ignore_not_found?: boolean; +} +interface DeleteResponse { + num_deleted: number; +} +interface ImportResponseSuccess { + success: true; +} +interface ImportResponseFail { + success: false; + error: string; + document: DocumentSchema; + code: number; +} +type ImportResponse = ImportResponseSuccess | ImportResponseFail; +type DocumentSchema = Record; +interface SearchParamsWithPreset extends Partial { + preset: string; +} +type OperationMode = "off" | "always" | "fallback"; +interface SearchParams { + q?: string; + query_by?: string | string[]; + query_by_weights?: string | number[]; + prefix?: string | boolean | boolean[]; + filter_by?: string; + enable_lazy_filter?: boolean; + sort_by?: string | string[]; + facet_by?: string | string[]; + max_facet_values?: number; + facet_sample_threshold?: number; + facet_sample_percent?: number; + facet_query?: string; + facet_query_num_typos?: number; + facet_return_parent?: string; + page?: number; + per_page?: number; + group_by?: string | string[]; + group_limit?: number; + group_missing_values?: boolean; + include_fields?: string | string[]; + exclude_fields?: string | string[]; + highlight_fields?: string | string[]; + highlight_full_fields?: string | string[]; + highlight_affix_num_tokens?: number; + highlight_start_tag?: string; + highlight_end_tag?: string; + enable_highlight_v1?: boolean; + snippet_threshold?: number; + num_typos?: string | number | number[]; + min_len_1typo?: number; + min_len_2typo?: number; + split_join_tokens?: OperationMode; + exhaustive_search?: boolean; + drop_tokens_threshold?: number; + typo_tokens_threshold?: number; + pinned_hits?: string | string[]; + hidden_hits?: string | string[]; + limit_hits?: number; + pre_segmented_query?: boolean; + enable_overrides?: boolean; + prioritize_exact_match?: boolean; + prioritize_token_position?: boolean; + prioritize_num_matching_fields?: boolean; + search_cutoff_ms?: number; + use_cache?: boolean; + max_candidates?: number; + infix?: OperationMode | OperationMode[]; + preset?: string; + text_match_type?: "max_score" | "max_weight"; + vector_query?: string; + "x-typesense-api-key"?: string; + "x-typesense-user-id"?: string; + offset?: number; + limit?: number; + stopwords?: string; + conversation?: boolean; + conversation_model_id?: string; + conversation_id?: string; + voice_query?: string; +} +type SearchResponseHighlightObject = { + matched_tokens?: string[]; + snippet?: string; + value?: string; +}; +type SearchResponseHighlight = T extends string | number ? SearchResponseHighlightObject : { + [TAttribute in keyof T]?: SearchResponseHighlight; +}; +interface SearchResponseHit { + curated?: true; + highlights?: [ + { + field: keyof T; + snippet?: string; + value?: string; + snippets?: string[]; + indices?: number[]; + matched_tokens: string[][] | string[]; + } + ]; + highlight: SearchResponseHighlight; + document: T; + text_match: number; + text_match_info?: { + best_field_score: string; + best_field_weight: number; + fields_matched: number; + score: string; + tokens_matched: number; + }; +} +interface SearchResponseFacetCountSchema { + counts: { + count: number; + highlighted: string; + value: string; + }[]; + field_name: keyof T; + stats: { + avg?: number; + max?: number; + min?: number; + sum?: number; + }; +} +interface SearchResponseRequestParams { + collection_name?: string; + q?: string; + page?: number; + per_page?: number; + first_q?: string; + voice_query?: { + transcribed_query?: string; + }; +} +interface SearchResponse { + facet_counts?: SearchResponseFacetCountSchema[]; + found: number; + found_docs?: number; + out_of: number; + page: number; + request_params: SearchResponseRequestParams; + search_time_ms: number; + search_cutoff?: boolean; + hits?: SearchResponseHit[]; + grouped_hits?: { + group_key: string[]; + hits: SearchResponseHit[]; + found?: number; + }[]; + conversation?: { + answer: string; + conversation_history: { + conversation: object[]; + id: string; + last_updated: number; + ttl: number; + }; + conversation_id: string; + query: string; + }; + error?: string; + code?: number; +} +interface DocumentWriteParameters { + dirty_values?: "coerce_or_reject" | "coerce_or_drop" | "drop" | "reject"; + action?: "create" | "update" | "upsert" | "emplace"; +} +interface UpdateByFilterParameters { + filter_by?: string; +} +interface UpdateByFilterResponse { + num_updated: number; +} +interface DocumentImportParameters extends DocumentWriteParameters { + batch_size?: number; + return_doc?: boolean; + return_id?: boolean; +} +interface DocumentsExportParameters { + filter_by?: string; + include_fields?: string; + exclude_fields?: string; +} +interface SearchableDocuments { + search(searchParameters: SearchParams | SearchParamsWithPreset, options: SearchOptions): Promise>; + clearCache(): void; +} +interface WriteableDocuments { + create(document: T, options: DocumentWriteParameters): Promise; + upsert(document: T, options: DocumentWriteParameters): Promise; + update(document: T, options: DocumentWriteParameters): Promise; + delete(query: DeleteQuery): Promise; + import(documents: T[] | string, options: DocumentWriteParameters): Promise; + export(options: DocumentsExportParameters): Promise; +} +interface SearchOptions { + cacheSearchResultsForSeconds?: number; + abortSignal?: AbortSignal | null; +} +declare class Documents extends SearchOnlyDocuments implements WriteableDocuments { + constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); + create(document: T, options?: DocumentWriteParameters): Promise; + upsert(document: T, options?: DocumentWriteParameters): Promise; + update(document: T, options: UpdateByFilterParameters): Promise; + update(document: T, options: DocumentWriteParameters): Promise; + delete(query?: DeleteQuery): Promise; + createMany(documents: T[], options?: DocumentImportParameters): Promise; + /** + * Import a set of documents in a batch. + * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects. + * @param options + * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results. + */ + import(documents: string, options?: DocumentImportParameters): Promise; + import(documents: T[], options?: DocumentImportParameters): Promise; + /** + * Imports documents from a NodeJS readable stream of JSONL. + */ + importStream(readableStream: ReadStream, options?: DocumentImportParameters): Promise; + /** + * Returns a JSONL string for all the documents in this collection + */ + export(options?: DocumentsExportParameters): Promise; + /** + * Returns a NodeJS readable stream of JSONL for all the documents in this collection. + */ + exportStream(options?: DocumentsExportParameters): Promise; +} + +interface OverrideSchema extends OverrideCreateSchema { + id: string; +} +interface OverrideDeleteSchema { + id: string; +} +declare class Override { + private collectionName; + private overrideId; + private apiCall; + constructor(collectionName: string, overrideId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface OverrideRuleQuerySchema { + query?: string; + match?: "exact" | "contains"; +} +interface OverrideRuleFilterSchema { + filter_by?: string; +} +interface OverrideRuleTagsSchema { + tags?: string[]; +} +interface OverrideCreateSchema { + rule: OverrideRuleQuerySchema & OverrideRuleFilterSchema & OverrideRuleTagsSchema; + filter_by?: string; + sort_by?: string; + remove_matched_tokens?: boolean; + replace_query?: string; + includes?: Array<{ + id: string; + position: number; + }>; + excludes?: Array<{ + id: string; + }>; + filter_curated_hits?: boolean; + effective_from_ts?: number; + effective_to_ts?: number; + stop_processing?: boolean; + metadata?: object; +} +interface OverridesRetrieveSchema { + overrides: OverrideSchema[]; +} +declare class Overrides { + private collectionName; + private apiCall; + constructor(collectionName: string, apiCall: ApiCall); + upsert(overrideId: string, params: OverrideCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface SynonymSchema extends SynonymCreateSchema { + id: string; +} +interface SynonymDeleteSchema { + id: string; +} +declare class Synonym { + private collectionName; + private synonymId; + private apiCall; + constructor(collectionName: string, synonymId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface SynonymCreateSchema { + synonyms: string[]; + root?: string; + locale?: string; + symbols_to_index?: string[]; +} +interface SynonymsRetrieveSchema { + synonyms: SynonymSchema[]; +} +declare class Synonyms { + private collectionName; + private apiCall; + constructor(collectionName: string, apiCall: ApiCall); + upsert(synonymId: string, params: SynonymCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Document { + private collectionName; + private documentId; + private apiCall; + constructor(collectionName: string, documentId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(options?: DeleteQuery): Promise; + update(partialDocument: Partial, options?: DocumentWriteParameters): Promise; + private endpointPath; +} + +type FieldType = "string" | "int32" | "int64" | "float" | "bool" | "geopoint" | "geopoint[]" | "string[]" | "int32[]" | "int64[]" | "float[]" | "bool[]" | "object" | "object[]" | "auto" | "string*" | "image"; +interface CollectionFieldSchema { + name: string; + type: FieldType; + optional?: boolean; + facet?: boolean; + index?: boolean; + sort?: boolean; + locale?: string; + infix?: boolean; + stem?: boolean; + num_dim?: number; + store?: boolean; + [t: string]: unknown; +} +interface CollectionSchema extends CollectionCreateSchema { + created_at: number; + num_documents: number; + num_memory_shards: number; +} +interface CollectionDropFieldSchema { + name: string; + drop: true; +} +interface CollectionUpdateSchema extends Partial> { + fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[]; +} +declare class Collection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + private individualDocuments; + private readonly _overrides; + private individualOverrides; + private readonly _synonyms; + private individualSynonyms; + constructor(name: string, apiCall: ApiCall, configuration: any); + retrieve(): Promise; + update(schema: CollectionUpdateSchema): Promise; + delete(): Promise; + exists(): Promise; + documents(): Documents; + documents(documentId: string): Document; + overrides(): Overrides; + overrides(overrideId: string): Override; + synonyms(): Synonyms; + synonyms(synonymId: string): Synonym; + private endpointPath; +} + +interface CollectionCreateSchema { + name: string; + default_sorting_field?: string; + fields?: CollectionFieldSchema[]; + symbols_to_index?: string[]; + token_separators?: string[]; + enable_nested_fields?: boolean; + metadata?: object; + voice_query_model?: { + model_name?: string; + }; +} +interface CollectionCreateOptions { + src_name?: string; +} +interface CollectionsRetrieveOptions { + exclude_fields?: string; +} +declare class Collections { + private apiCall; + constructor(apiCall: ApiCall); + create(schema: CollectionCreateSchema, options?: CollectionCreateOptions): Promise; + retrieve(options?: CollectionsRetrieveOptions): Promise; + static get RESOURCEPATH(): string; +} + +interface CollectionAliasCreateSchema { + collection_name: string; +} +interface CollectionAliasSchema extends CollectionAliasCreateSchema { + name: string; +} +interface CollectionAliasesResponseSchema { + aliases: CollectionAliasSchema[]; +} +declare class Aliases { + private apiCall; + constructor(apiCall: ApiCall); + upsert(name: string, mapping: CollectionAliasCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Alias { + private name; + private apiCall; + constructor(name: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface KeyCreateSchema { + actions: string[]; + collections: string[]; + description?: string; + value?: string; + value_prefix?: string; + expires_at?: number; +} +interface KeyDeleteSchema { + id: number; +} +interface KeySchema extends KeyCreateSchema { + id: number; +} +declare class Key { + private id; + private apiCall; + constructor(id: number, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface KeysRetrieveSchema { + keys: KeySchema[]; +} +interface GenerateScopedSearchKeyParams extends Partial { + expires_at?: number; + cache_ttl?: number; + limit_multi_searches?: number; +} +declare class Keys { + private apiCall; + constructor(apiCall: ApiCall); + create(params: KeyCreateSchema): Promise; + retrieve(): Promise; + generateScopedSearchKey(searchKey: string, parameters: GenerateScopedSearchKeyParams): string; + static get RESOURCEPATH(): string; +} + +interface DebugResponseSchema { + state: number; + version: string; +} +declare class Debug { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +interface MetricsResponse { + [key: `system_cpu${number}_active_percentage`]: string; + system_cpu_active_percentage: string; + system_disk_total_bytes: string; + system_disk_used_bytes: string; + system_memory_total_bytes: string; + system_memory_total_swap_bytes?: string; + system_memory_used_bytes: string; + system_memory_used_swap_bytes?: string; + system_network_received_bytes: string; + system_network_sent_bytes: string; + typesense_memory_active_bytes: string; + typesense_memory_allocated_bytes: string; + typesense_memory_fragmentation_ratio: string; + typesense_memory_mapped_bytes: string; + typesense_memory_metadata_bytes: string; + typesense_memory_resident_bytes: string; + typesense_memory_retained_bytes: string; +} +declare class Metrics$1 { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +interface EndpointStats { + [endpoint: string]: number; +} +interface StatsResponse { + delete_latency_ms?: number; + delete_requests_per_second?: number; + import_latency_ms?: number; + import_requests_per_second?: number; + latency_ms?: EndpointStats; + overloaded_requests_per_second?: number; + pending_write_batches?: number; + requests_per_second?: EndpointStats; + search_latency_ms?: number; + search_requests_per_second?: number; + total_requests_per_second?: number; + write_latency_ms?: number; + write_requests_per_second?: number; +} +declare class Metrics { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +interface HealthResponse { + ok: boolean; +} +declare class Health { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +declare class Operations { + private apiCall; + constructor(apiCall: ApiCall); + perform(operationName: "vote" | "snapshot" | "cache/clear" | string, queryParameters?: Record): Promise; +} + +interface MultiSearchRequestSchema extends SearchParams { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestsSchema { + searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; +} +interface MultiSearchResponse { + results: { + [Index in keyof T]: SearchResponse; + } & { + length: T["length"]; + }; +} +declare class MultiSearch { + private apiCall; + private configuration; + private useTextContentType; + private requestWithCache; + constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); + clearCache(): void; + perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { + cacheSearchResultsForSeconds?: number; + }): Promise>; +} + +interface PresetSchema extends PresetCreateSchema { + name: string; +} +interface PresetDeleteSchema { + name: string; +} +declare class Preset { + private presetId; + private apiCall; + constructor(presetId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface PresetCreateSchema { + value: SearchParams | MultiSearchRequestsSchema; +} +interface PresetsRetrieveSchema { + presets: PresetSchema[]; +} +declare class Presets { + private apiCall; + constructor(apiCall: ApiCall); + upsert(presetId: string, params: PresetCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface AnalyticsRuleCreateSchema { + type: "popular_queries" | "nohits_queries" | "counter"; + params: { + source: { + collections: string[]; + events?: Array<{ + type: string; + weight: number; + name: string; + }>; + }; + expand_query?: boolean; + destination: { + collection: string; + counter_field?: string; + }; + limit?: number; + }; +} +interface AnalyticsRuleDeleteSchema { + name: string; +} +interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema { + name: string; +} +declare class AnalyticsRule { + private name; + private apiCall; + constructor(name: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface AnalyticsRulesRetrieveSchema { + rules: AnalyticsRuleSchema[]; +} +declare class AnalyticsRules { + private readonly apiCall; + constructor(apiCall: ApiCall); + upsert(name: string, params: AnalyticsRuleCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface AnalyticsEventCreateSchema { + type: string; + name: string; + data?: object; +} + +declare class AnalyticsEvents { + private readonly apiCall; + constructor(apiCall: ApiCall); + create(params: AnalyticsEventCreateSchema): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Analytics { + private readonly apiCall; + private readonly _analyticsRules; + private readonly individualAnalyticsRules; + private readonly _analyticsEvents; + constructor(apiCall: ApiCall); + rules(id?: string): AnalyticsRules | AnalyticsRule; + events(): AnalyticsEvents; + static get RESOURCEPATH(): string; +} + +interface StopwordSchema extends StopwordCreateSchema { + id: string; + stopwords: string[]; + locale?: string; +} +interface StopwordDeleteSchema { + id: string; +} +declare class Stopword { + private stopwordId; + private apiCall; + constructor(stopwordId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface StopwordCreateSchema { + stopwords: string[]; + locale?: string; +} +interface StopwordsRetrieveSchema { + stopwords: StopwordSchema[]; +} +declare class Stopwords { + private apiCall; + constructor(apiCall: ApiCall); + upsert(stopwordId: string, params: StopwordCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface ConversationModelCreateSchema { + id?: string; + model_name: string; + api_key?: string; + system_prompt?: string; + max_bytes: number; + history_collection?: string; +} +interface ConversationModelDeleteSchema { + id: string; +} +interface ConversationModelSchema extends ConversationModelCreateSchema { + id: string; +} +declare class ConversationModel { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + update(params: ConversationModelCreateSchema): Promise; + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +declare class ConversationModels { + private readonly apiCall; + constructor(apiCall: ApiCall); + create(params: ConversationModelCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface ConversationDeleteSchema { + id: number; +} +interface ConversationUpdateSchema { + ttl: number; +} +interface ConversationSchema { + id: number; + conversation: object[]; + last_updated: number; + ttl: number; +} +declare class Conversation { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + retrieve(): Promise; + update(params: ConversationUpdateSchema): Promise; + delete(): Promise; + private endpointPath; +} + +interface ConversationsRetrieveSchema { + conversations: ConversationSchema[]; +} +declare class Conversations { + private readonly apiCall; + private readonly _conversationsModels; + private readonly individualConversationModels; + constructor(apiCall: ApiCall); + retrieve(): Promise; + models(): ConversationModels; + models(id: string): ConversationModel; + static get RESOURCEPATH(): string; +} + +declare class Client { + configuration: Configuration; + apiCall: ApiCall; + debug: Debug; + metrics: Metrics$1; + stats: Metrics; + health: Health; + operations: Operations; + multiSearch: MultiSearch; + analytics: Analytics; + private readonly _collections; + private readonly individualCollections; + private readonly _aliases; + private readonly individualAliases; + private readonly _keys; + private readonly individualKeys; + private readonly _presets; + private readonly individualPresets; + private readonly _stopwords; + private readonly individualStopwords; + private readonly _conversations; + private readonly individualConversations; + constructor(options: ConfigurationOptions); + collections(): Collections; + collections = object>(collectionName: string): Collection; + aliases(): Aliases; + aliases(aliasName: string): Alias; + keys(): Keys; + keys(id: number): Key; + presets(): Presets; + presets(id: string): Preset; + stopwords(): Stopwords; + stopwords(id: string): Stopword; + conversations(): Conversations; + conversations(id: string): Conversation; +} + +declare class SearchOnlyCollection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + constructor(name: string, apiCall: ApiCall, configuration: any); + documents(): SearchableDocuments; +} + +declare class SearchClient { + readonly multiSearch: MultiSearch; + private readonly configuration; + private readonly apiCall; + private readonly individualCollections; + constructor(options: ConfigurationOptions); + clearCache(): void; + collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; +} + +declare class HTTPError extends TypesenseError { +} + +declare class MissingConfigurationError extends TypesenseError { +} + +declare class ObjectAlreadyExists extends TypesenseError { +} + +declare class ObjectNotFound extends TypesenseError { +} + +declare class ObjectUnprocessable extends TypesenseError { +} + +declare class RequestMalformed extends TypesenseError { +} + +declare class RequestUnauthorized extends TypesenseError { +} + +declare class ServerError extends TypesenseError { +} + +declare class ImportError extends TypesenseError { + importResults: ImportResponse[]; + constructor(message: string, importResults: ImportResponse[]); +} + +type Errors_HTTPError = HTTPError; +declare const Errors_HTTPError: typeof HTTPError; +type Errors_ImportError = ImportError; +declare const Errors_ImportError: typeof ImportError; +type Errors_MissingConfigurationError = MissingConfigurationError; +declare const Errors_MissingConfigurationError: typeof MissingConfigurationError; +type Errors_ObjectAlreadyExists = ObjectAlreadyExists; +declare const Errors_ObjectAlreadyExists: typeof ObjectAlreadyExists; +type Errors_ObjectNotFound = ObjectNotFound; +declare const Errors_ObjectNotFound: typeof ObjectNotFound; +type Errors_ObjectUnprocessable = ObjectUnprocessable; +declare const Errors_ObjectUnprocessable: typeof ObjectUnprocessable; +type Errors_RequestMalformed = RequestMalformed; +declare const Errors_RequestMalformed: typeof RequestMalformed; +type Errors_RequestUnauthorized = RequestUnauthorized; +declare const Errors_RequestUnauthorized: typeof RequestUnauthorized; +type Errors_ServerError = ServerError; +declare const Errors_ServerError: typeof ServerError; +type Errors_TypesenseError = TypesenseError; +declare const Errors_TypesenseError: typeof TypesenseError; +declare namespace Errors { + export { Errors_HTTPError as HTTPError, Errors_ImportError as ImportError, Errors_MissingConfigurationError as MissingConfigurationError, Errors_ObjectAlreadyExists as ObjectAlreadyExists, Errors_ObjectNotFound as ObjectNotFound, Errors_ObjectUnprocessable as ObjectUnprocessable, Errors_RequestMalformed as RequestMalformed, Errors_RequestUnauthorized as RequestUnauthorized, Errors_ServerError as ServerError, Errors_TypesenseError as TypesenseError }; +} + +declare const _default: { + Client: typeof Client; + SearchClient: typeof SearchClient; + Errors: typeof Errors; +}; + +export { Client, Errors, SearchClient, _default as default }; diff --git a/dist/Typesense.d.ts b/dist/Typesense.d.ts new file mode 100644 index 00000000..4654ff7a --- /dev/null +++ b/dist/Typesense.d.ts @@ -0,0 +1,1084 @@ +import { LogLevelDesc, Logger } from 'loglevel'; +import { Agent } from 'http'; +import { Agent as Agent$1 } from 'https'; +import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; +import { ReadStream } from 'fs'; + +interface NodeConfiguration { + host: string; + port: number; + protocol: string; + path?: string; + url?: string; +} +interface NodeConfigurationWithHostname { + host: string; + port: number; + protocol: string; + path?: string; +} +interface NodeConfigurationWithUrl { + url: string; +} +interface ConfigurationOptions { + apiKey: string; + nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + randomizeNodes?: boolean; + /** + * @deprecated + * masterNode is now consolidated to nodes, starting with Typesense Server v0.12' + */ + masterNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + /** + * @deprecated + * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12' + */ + readReplicaNodes?: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + connectionTimeoutSeconds?: number; + timeoutSeconds?: number; + healthcheckIntervalSeconds?: number; + numRetries?: number; + retryIntervalSeconds?: number; + sendApiKeyAsQueryParam?: boolean | undefined; + useServerSideSearchCache?: boolean; + cacheSearchResultsForSeconds?: number; + additionalHeaders?: Record; + logLevel?: LogLevelDesc; + logger?: Logger; + /** + * Set a custom HTTP Agent + * + * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors + * Usage: + * const { Agent: HTTPAgent } = require("http"); + * ... + * httpAgent: new HTTPAgent({ keepAlive: true }), + * @type {HTTPAgent} + */ + httpAgent?: Agent; + /** + * Set a custom HTTPS Agent + * + * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors + * Usage: + * const { Agent: HTTPSAgent } = require("https"); + * ... + * httpsAgent: new HTTPSAgent({ keepAlive: true }), + * @type {HTTPSAgent} + */ + httpsAgent?: Agent$1; + /** + * Set a custom paramsSerializer + * + * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config + * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397 + * @type {any} + */ + paramsSerializer?: any; +} +declare class Configuration { + readonly nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + readonly nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + readonly connectionTimeoutSeconds: number; + readonly healthcheckIntervalSeconds: number; + readonly numRetries: number; + readonly retryIntervalSeconds: number; + readonly apiKey: string; + readonly sendApiKeyAsQueryParam?: boolean; + readonly cacheSearchResultsForSeconds: number; + readonly useServerSideSearchCache: boolean; + readonly logger: Logger; + readonly logLevel: LogLevelDesc; + readonly additionalHeaders?: Record; + readonly httpAgent?: Agent; + readonly httpsAgent?: Agent$1; + readonly paramsSerializer?: any; + constructor(options: ConfigurationOptions); + validate(): boolean; + private validateNodes; + private isNodeMissingAnyParameters; + private setDefaultPathInNode; + private setDefaultPortInNode; + private showDeprecationWarnings; + private shuffleArray; +} + +declare class TypesenseError extends Error { + httpStatus?: number; + constructor(message?: string); +} + +interface Node extends NodeConfiguration { + isHealthy: boolean; + index: string | number; +} +declare class ApiCall { + private configuration; + private readonly apiKey; + private readonly nodes; + private readonly nearestNode; + private readonly connectionTimeoutSeconds; + private readonly healthcheckIntervalSeconds; + private readonly retryIntervalSeconds; + private readonly sendApiKeyAsQueryParam?; + private readonly numRetriesPerRequest; + private readonly additionalUserHeaders?; + private readonly logger; + private currentNodeIndex; + constructor(configuration: Configuration); + get(endpoint: string, queryParameters?: any, { abortSignal, responseType, }?: { + abortSignal?: any; + responseType?: AxiosRequestConfig["responseType"] | undefined; + }): Promise; + delete(endpoint: string, queryParameters?: any): Promise; + post(endpoint: string, bodyParameters?: any, queryParameters?: any, additionalHeaders?: any): Promise; + put(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + patch(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + performRequest(requestType: Method, endpoint: string, { queryParameters, bodyParameters, additionalHeaders, abortSignal, responseType, skipConnectionTimeout, enableKeepAlive, }: { + queryParameters?: any; + bodyParameters?: any; + additionalHeaders?: any; + abortSignal?: any; + responseType?: AxiosRequestConfig["responseType"] | undefined; + skipConnectionTimeout?: boolean; + enableKeepAlive?: boolean | undefined; + }): Promise; + getNextNode(requestNumber?: number): Node; + nodeDueForHealthcheck(node: any, requestNumber?: number): boolean; + initializeMetadataForNodes(): void; + setNodeHealthcheck(node: any, isHealthy: any): void; + uriFor(endpoint: string, node: any): string; + defaultHeaders(): any; + timer(seconds: any): Promise; + customErrorForResponse(response: AxiosResponse, messageFromServer: string): TypesenseError; +} + +declare class RequestWithCache { + private responseCache; + private responsePromiseCache; + clearCache(): void; + perform(requestContext: any, requestFunction: (...params: any) => unknown, requestFunctionArguments: any[], cacheOptions: CacheOptions): Promise; +} +interface CacheOptions { + cacheResponseForSeconds?: number; + maxSize?: number; +} + +declare class SearchOnlyDocuments implements SearchableDocuments { + protected collectionName: string; + protected apiCall: ApiCall; + protected configuration: Configuration; + protected requestWithCache: RequestWithCache; + constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); + clearCache(): void; + search(searchParameters: SearchParams | SearchParamsWithPreset, { cacheSearchResultsForSeconds, abortSignal, }?: SearchOptions): Promise>; + protected endpointPath(operation?: string): string; + static get RESOURCEPATH(): string; +} + +interface DeleteQuery { + filter_by?: string; + batch_size?: number; + ignore_not_found?: boolean; +} +interface DeleteResponse { + num_deleted: number; +} +interface ImportResponseSuccess { + success: true; +} +interface ImportResponseFail { + success: false; + error: string; + document: DocumentSchema; + code: number; +} +type ImportResponse = ImportResponseSuccess | ImportResponseFail; +type DocumentSchema = Record; +interface SearchParamsWithPreset extends Partial { + preset: string; +} +type OperationMode = "off" | "always" | "fallback"; +interface SearchParams { + q?: string; + query_by?: string | string[]; + query_by_weights?: string | number[]; + prefix?: string | boolean | boolean[]; + filter_by?: string; + enable_lazy_filter?: boolean; + sort_by?: string | string[]; + facet_by?: string | string[]; + max_facet_values?: number; + facet_sample_threshold?: number; + facet_sample_percent?: number; + facet_query?: string; + facet_query_num_typos?: number; + facet_return_parent?: string; + page?: number; + per_page?: number; + group_by?: string | string[]; + group_limit?: number; + group_missing_values?: boolean; + include_fields?: string | string[]; + exclude_fields?: string | string[]; + highlight_fields?: string | string[]; + highlight_full_fields?: string | string[]; + highlight_affix_num_tokens?: number; + highlight_start_tag?: string; + highlight_end_tag?: string; + enable_highlight_v1?: boolean; + snippet_threshold?: number; + num_typos?: string | number | number[]; + min_len_1typo?: number; + min_len_2typo?: number; + split_join_tokens?: OperationMode; + exhaustive_search?: boolean; + drop_tokens_threshold?: number; + typo_tokens_threshold?: number; + pinned_hits?: string | string[]; + hidden_hits?: string | string[]; + limit_hits?: number; + pre_segmented_query?: boolean; + enable_overrides?: boolean; + prioritize_exact_match?: boolean; + prioritize_token_position?: boolean; + prioritize_num_matching_fields?: boolean; + search_cutoff_ms?: number; + use_cache?: boolean; + max_candidates?: number; + infix?: OperationMode | OperationMode[]; + preset?: string; + text_match_type?: "max_score" | "max_weight"; + vector_query?: string; + "x-typesense-api-key"?: string; + "x-typesense-user-id"?: string; + offset?: number; + limit?: number; + stopwords?: string; + conversation?: boolean; + conversation_model_id?: string; + conversation_id?: string; + voice_query?: string; +} +type SearchResponseHighlightObject = { + matched_tokens?: string[]; + snippet?: string; + value?: string; +}; +type SearchResponseHighlight = T extends string | number ? SearchResponseHighlightObject : { + [TAttribute in keyof T]?: SearchResponseHighlight; +}; +interface SearchResponseHit { + curated?: true; + highlights?: [ + { + field: keyof T; + snippet?: string; + value?: string; + snippets?: string[]; + indices?: number[]; + matched_tokens: string[][] | string[]; + } + ]; + highlight: SearchResponseHighlight; + document: T; + text_match: number; + text_match_info?: { + best_field_score: string; + best_field_weight: number; + fields_matched: number; + score: string; + tokens_matched: number; + }; +} +interface SearchResponseFacetCountSchema { + counts: { + count: number; + highlighted: string; + value: string; + }[]; + field_name: keyof T; + stats: { + avg?: number; + max?: number; + min?: number; + sum?: number; + }; +} +interface SearchResponseRequestParams { + collection_name?: string; + q?: string; + page?: number; + per_page?: number; + first_q?: string; + voice_query?: { + transcribed_query?: string; + }; +} +interface SearchResponse { + facet_counts?: SearchResponseFacetCountSchema[]; + found: number; + found_docs?: number; + out_of: number; + page: number; + request_params: SearchResponseRequestParams; + search_time_ms: number; + search_cutoff?: boolean; + hits?: SearchResponseHit[]; + grouped_hits?: { + group_key: string[]; + hits: SearchResponseHit[]; + found?: number; + }[]; + conversation?: { + answer: string; + conversation_history: { + conversation: object[]; + id: string; + last_updated: number; + ttl: number; + }; + conversation_id: string; + query: string; + }; + error?: string; + code?: number; +} +interface DocumentWriteParameters { + dirty_values?: "coerce_or_reject" | "coerce_or_drop" | "drop" | "reject"; + action?: "create" | "update" | "upsert" | "emplace"; +} +interface UpdateByFilterParameters { + filter_by?: string; +} +interface UpdateByFilterResponse { + num_updated: number; +} +interface DocumentImportParameters extends DocumentWriteParameters { + batch_size?: number; + return_doc?: boolean; + return_id?: boolean; +} +interface DocumentsExportParameters { + filter_by?: string; + include_fields?: string; + exclude_fields?: string; +} +interface SearchableDocuments { + search(searchParameters: SearchParams | SearchParamsWithPreset, options: SearchOptions): Promise>; + clearCache(): void; +} +interface WriteableDocuments { + create(document: T, options: DocumentWriteParameters): Promise; + upsert(document: T, options: DocumentWriteParameters): Promise; + update(document: T, options: DocumentWriteParameters): Promise; + delete(query: DeleteQuery): Promise; + import(documents: T[] | string, options: DocumentWriteParameters): Promise; + export(options: DocumentsExportParameters): Promise; +} +interface SearchOptions { + cacheSearchResultsForSeconds?: number; + abortSignal?: AbortSignal | null; +} +declare class Documents extends SearchOnlyDocuments implements WriteableDocuments { + constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); + create(document: T, options?: DocumentWriteParameters): Promise; + upsert(document: T, options?: DocumentWriteParameters): Promise; + update(document: T, options: UpdateByFilterParameters): Promise; + update(document: T, options: DocumentWriteParameters): Promise; + delete(query?: DeleteQuery): Promise; + createMany(documents: T[], options?: DocumentImportParameters): Promise; + /** + * Import a set of documents in a batch. + * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects. + * @param options + * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results. + */ + import(documents: string, options?: DocumentImportParameters): Promise; + import(documents: T[], options?: DocumentImportParameters): Promise; + /** + * Imports documents from a NodeJS readable stream of JSONL. + */ + importStream(readableStream: ReadStream, options?: DocumentImportParameters): Promise; + /** + * Returns a JSONL string for all the documents in this collection + */ + export(options?: DocumentsExportParameters): Promise; + /** + * Returns a NodeJS readable stream of JSONL for all the documents in this collection. + */ + exportStream(options?: DocumentsExportParameters): Promise; +} + +interface OverrideSchema extends OverrideCreateSchema { + id: string; +} +interface OverrideDeleteSchema { + id: string; +} +declare class Override { + private collectionName; + private overrideId; + private apiCall; + constructor(collectionName: string, overrideId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface OverrideRuleQuerySchema { + query?: string; + match?: "exact" | "contains"; +} +interface OverrideRuleFilterSchema { + filter_by?: string; +} +interface OverrideRuleTagsSchema { + tags?: string[]; +} +interface OverrideCreateSchema { + rule: OverrideRuleQuerySchema & OverrideRuleFilterSchema & OverrideRuleTagsSchema; + filter_by?: string; + sort_by?: string; + remove_matched_tokens?: boolean; + replace_query?: string; + includes?: Array<{ + id: string; + position: number; + }>; + excludes?: Array<{ + id: string; + }>; + filter_curated_hits?: boolean; + effective_from_ts?: number; + effective_to_ts?: number; + stop_processing?: boolean; + metadata?: object; +} +interface OverridesRetrieveSchema { + overrides: OverrideSchema[]; +} +declare class Overrides { + private collectionName; + private apiCall; + constructor(collectionName: string, apiCall: ApiCall); + upsert(overrideId: string, params: OverrideCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface SynonymSchema extends SynonymCreateSchema { + id: string; +} +interface SynonymDeleteSchema { + id: string; +} +declare class Synonym { + private collectionName; + private synonymId; + private apiCall; + constructor(collectionName: string, synonymId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface SynonymCreateSchema { + synonyms: string[]; + root?: string; + locale?: string; + symbols_to_index?: string[]; +} +interface SynonymsRetrieveSchema { + synonyms: SynonymSchema[]; +} +declare class Synonyms { + private collectionName; + private apiCall; + constructor(collectionName: string, apiCall: ApiCall); + upsert(synonymId: string, params: SynonymCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Document { + private collectionName; + private documentId; + private apiCall; + constructor(collectionName: string, documentId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(options?: DeleteQuery): Promise; + update(partialDocument: Partial, options?: DocumentWriteParameters): Promise; + private endpointPath; +} + +type FieldType = "string" | "int32" | "int64" | "float" | "bool" | "geopoint" | "geopoint[]" | "string[]" | "int32[]" | "int64[]" | "float[]" | "bool[]" | "object" | "object[]" | "auto" | "string*" | "image"; +interface CollectionFieldSchema { + name: string; + type: FieldType; + optional?: boolean; + facet?: boolean; + index?: boolean; + sort?: boolean; + locale?: string; + infix?: boolean; + stem?: boolean; + num_dim?: number; + store?: boolean; + [t: string]: unknown; +} +interface CollectionSchema extends CollectionCreateSchema { + created_at: number; + num_documents: number; + num_memory_shards: number; +} +interface CollectionDropFieldSchema { + name: string; + drop: true; +} +interface CollectionUpdateSchema extends Partial> { + fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[]; +} +declare class Collection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + private individualDocuments; + private readonly _overrides; + private individualOverrides; + private readonly _synonyms; + private individualSynonyms; + constructor(name: string, apiCall: ApiCall, configuration: any); + retrieve(): Promise; + update(schema: CollectionUpdateSchema): Promise; + delete(): Promise; + exists(): Promise; + documents(): Documents; + documents(documentId: string): Document; + overrides(): Overrides; + overrides(overrideId: string): Override; + synonyms(): Synonyms; + synonyms(synonymId: string): Synonym; + private endpointPath; +} + +interface CollectionCreateSchema { + name: string; + default_sorting_field?: string; + fields?: CollectionFieldSchema[]; + symbols_to_index?: string[]; + token_separators?: string[]; + enable_nested_fields?: boolean; + metadata?: object; + voice_query_model?: { + model_name?: string; + }; +} +interface CollectionCreateOptions { + src_name?: string; +} +interface CollectionsRetrieveOptions { + exclude_fields?: string; +} +declare class Collections { + private apiCall; + constructor(apiCall: ApiCall); + create(schema: CollectionCreateSchema, options?: CollectionCreateOptions): Promise; + retrieve(options?: CollectionsRetrieveOptions): Promise; + static get RESOURCEPATH(): string; +} + +interface CollectionAliasCreateSchema { + collection_name: string; +} +interface CollectionAliasSchema extends CollectionAliasCreateSchema { + name: string; +} +interface CollectionAliasesResponseSchema { + aliases: CollectionAliasSchema[]; +} +declare class Aliases { + private apiCall; + constructor(apiCall: ApiCall); + upsert(name: string, mapping: CollectionAliasCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Alias { + private name; + private apiCall; + constructor(name: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface KeyCreateSchema { + actions: string[]; + collections: string[]; + description?: string; + value?: string; + value_prefix?: string; + expires_at?: number; +} +interface KeyDeleteSchema { + id: number; +} +interface KeySchema extends KeyCreateSchema { + id: number; +} +declare class Key { + private id; + private apiCall; + constructor(id: number, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface KeysRetrieveSchema { + keys: KeySchema[]; +} +interface GenerateScopedSearchKeyParams extends Partial { + expires_at?: number; + cache_ttl?: number; + limit_multi_searches?: number; +} +declare class Keys { + private apiCall; + constructor(apiCall: ApiCall); + create(params: KeyCreateSchema): Promise; + retrieve(): Promise; + generateScopedSearchKey(searchKey: string, parameters: GenerateScopedSearchKeyParams): string; + static get RESOURCEPATH(): string; +} + +interface DebugResponseSchema { + state: number; + version: string; +} +declare class Debug { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +interface MetricsResponse { + [key: `system_cpu${number}_active_percentage`]: string; + system_cpu_active_percentage: string; + system_disk_total_bytes: string; + system_disk_used_bytes: string; + system_memory_total_bytes: string; + system_memory_total_swap_bytes?: string; + system_memory_used_bytes: string; + system_memory_used_swap_bytes?: string; + system_network_received_bytes: string; + system_network_sent_bytes: string; + typesense_memory_active_bytes: string; + typesense_memory_allocated_bytes: string; + typesense_memory_fragmentation_ratio: string; + typesense_memory_mapped_bytes: string; + typesense_memory_metadata_bytes: string; + typesense_memory_resident_bytes: string; + typesense_memory_retained_bytes: string; +} +declare class Metrics$1 { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +interface EndpointStats { + [endpoint: string]: number; +} +interface StatsResponse { + delete_latency_ms?: number; + delete_requests_per_second?: number; + import_latency_ms?: number; + import_requests_per_second?: number; + latency_ms?: EndpointStats; + overloaded_requests_per_second?: number; + pending_write_batches?: number; + requests_per_second?: EndpointStats; + search_latency_ms?: number; + search_requests_per_second?: number; + total_requests_per_second?: number; + write_latency_ms?: number; + write_requests_per_second?: number; +} +declare class Metrics { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +interface HealthResponse { + ok: boolean; +} +declare class Health { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +declare class Operations { + private apiCall; + constructor(apiCall: ApiCall); + perform(operationName: "vote" | "snapshot" | "cache/clear" | string, queryParameters?: Record): Promise; +} + +interface MultiSearchRequestSchema extends SearchParams { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestsSchema { + searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; +} +interface MultiSearchResponse { + results: { + [Index in keyof T]: SearchResponse; + } & { + length: T["length"]; + }; +} +declare class MultiSearch { + private apiCall; + private configuration; + private useTextContentType; + private requestWithCache; + constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); + clearCache(): void; + perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { + cacheSearchResultsForSeconds?: number; + }): Promise>; +} + +interface PresetSchema extends PresetCreateSchema { + name: string; +} +interface PresetDeleteSchema { + name: string; +} +declare class Preset { + private presetId; + private apiCall; + constructor(presetId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface PresetCreateSchema { + value: SearchParams | MultiSearchRequestsSchema; +} +interface PresetsRetrieveSchema { + presets: PresetSchema[]; +} +declare class Presets { + private apiCall; + constructor(apiCall: ApiCall); + upsert(presetId: string, params: PresetCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface AnalyticsRuleCreateSchema { + type: "popular_queries" | "nohits_queries" | "counter"; + params: { + source: { + collections: string[]; + events?: Array<{ + type: string; + weight: number; + name: string; + }>; + }; + expand_query?: boolean; + destination: { + collection: string; + counter_field?: string; + }; + limit?: number; + }; +} +interface AnalyticsRuleDeleteSchema { + name: string; +} +interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema { + name: string; +} +declare class AnalyticsRule { + private name; + private apiCall; + constructor(name: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface AnalyticsRulesRetrieveSchema { + rules: AnalyticsRuleSchema[]; +} +declare class AnalyticsRules { + private readonly apiCall; + constructor(apiCall: ApiCall); + upsert(name: string, params: AnalyticsRuleCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface AnalyticsEventCreateSchema { + type: string; + name: string; + data?: object; +} + +declare class AnalyticsEvents { + private readonly apiCall; + constructor(apiCall: ApiCall); + create(params: AnalyticsEventCreateSchema): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Analytics { + private readonly apiCall; + private readonly _analyticsRules; + private readonly individualAnalyticsRules; + private readonly _analyticsEvents; + constructor(apiCall: ApiCall); + rules(id?: string): AnalyticsRules | AnalyticsRule; + events(): AnalyticsEvents; + static get RESOURCEPATH(): string; +} + +interface StopwordSchema extends StopwordCreateSchema { + id: string; + stopwords: string[]; + locale?: string; +} +interface StopwordDeleteSchema { + id: string; +} +declare class Stopword { + private stopwordId; + private apiCall; + constructor(stopwordId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface StopwordCreateSchema { + stopwords: string[]; + locale?: string; +} +interface StopwordsRetrieveSchema { + stopwords: StopwordSchema[]; +} +declare class Stopwords { + private apiCall; + constructor(apiCall: ApiCall); + upsert(stopwordId: string, params: StopwordCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface ConversationModelCreateSchema { + id?: string; + model_name: string; + api_key?: string; + system_prompt?: string; + max_bytes: number; + history_collection?: string; +} +interface ConversationModelDeleteSchema { + id: string; +} +interface ConversationModelSchema extends ConversationModelCreateSchema { + id: string; +} +declare class ConversationModel { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + update(params: ConversationModelCreateSchema): Promise; + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +declare class ConversationModels { + private readonly apiCall; + constructor(apiCall: ApiCall); + create(params: ConversationModelCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface ConversationDeleteSchema { + id: number; +} +interface ConversationUpdateSchema { + ttl: number; +} +interface ConversationSchema { + id: number; + conversation: object[]; + last_updated: number; + ttl: number; +} +declare class Conversation { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + retrieve(): Promise; + update(params: ConversationUpdateSchema): Promise; + delete(): Promise; + private endpointPath; +} + +interface ConversationsRetrieveSchema { + conversations: ConversationSchema[]; +} +declare class Conversations { + private readonly apiCall; + private readonly _conversationsModels; + private readonly individualConversationModels; + constructor(apiCall: ApiCall); + retrieve(): Promise; + models(): ConversationModels; + models(id: string): ConversationModel; + static get RESOURCEPATH(): string; +} + +declare class Client { + configuration: Configuration; + apiCall: ApiCall; + debug: Debug; + metrics: Metrics$1; + stats: Metrics; + health: Health; + operations: Operations; + multiSearch: MultiSearch; + analytics: Analytics; + private readonly _collections; + private readonly individualCollections; + private readonly _aliases; + private readonly individualAliases; + private readonly _keys; + private readonly individualKeys; + private readonly _presets; + private readonly individualPresets; + private readonly _stopwords; + private readonly individualStopwords; + private readonly _conversations; + private readonly individualConversations; + constructor(options: ConfigurationOptions); + collections(): Collections; + collections = object>(collectionName: string): Collection; + aliases(): Aliases; + aliases(aliasName: string): Alias; + keys(): Keys; + keys(id: number): Key; + presets(): Presets; + presets(id: string): Preset; + stopwords(): Stopwords; + stopwords(id: string): Stopword; + conversations(): Conversations; + conversations(id: string): Conversation; +} + +declare class SearchOnlyCollection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + constructor(name: string, apiCall: ApiCall, configuration: any); + documents(): SearchableDocuments; +} + +declare class SearchClient { + readonly multiSearch: MultiSearch; + private readonly configuration; + private readonly apiCall; + private readonly individualCollections; + constructor(options: ConfigurationOptions); + clearCache(): void; + collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; +} + +declare class HTTPError extends TypesenseError { +} + +declare class MissingConfigurationError extends TypesenseError { +} + +declare class ObjectAlreadyExists extends TypesenseError { +} + +declare class ObjectNotFound extends TypesenseError { +} + +declare class ObjectUnprocessable extends TypesenseError { +} + +declare class RequestMalformed extends TypesenseError { +} + +declare class RequestUnauthorized extends TypesenseError { +} + +declare class ServerError extends TypesenseError { +} + +declare class ImportError extends TypesenseError { + importResults: ImportResponse[]; + constructor(message: string, importResults: ImportResponse[]); +} + +type Errors_HTTPError = HTTPError; +declare const Errors_HTTPError: typeof HTTPError; +type Errors_ImportError = ImportError; +declare const Errors_ImportError: typeof ImportError; +type Errors_MissingConfigurationError = MissingConfigurationError; +declare const Errors_MissingConfigurationError: typeof MissingConfigurationError; +type Errors_ObjectAlreadyExists = ObjectAlreadyExists; +declare const Errors_ObjectAlreadyExists: typeof ObjectAlreadyExists; +type Errors_ObjectNotFound = ObjectNotFound; +declare const Errors_ObjectNotFound: typeof ObjectNotFound; +type Errors_ObjectUnprocessable = ObjectUnprocessable; +declare const Errors_ObjectUnprocessable: typeof ObjectUnprocessable; +type Errors_RequestMalformed = RequestMalformed; +declare const Errors_RequestMalformed: typeof RequestMalformed; +type Errors_RequestUnauthorized = RequestUnauthorized; +declare const Errors_RequestUnauthorized: typeof RequestUnauthorized; +type Errors_ServerError = ServerError; +declare const Errors_ServerError: typeof ServerError; +type Errors_TypesenseError = TypesenseError; +declare const Errors_TypesenseError: typeof TypesenseError; +declare namespace Errors { + export { Errors_HTTPError as HTTPError, Errors_ImportError as ImportError, Errors_MissingConfigurationError as MissingConfigurationError, Errors_ObjectAlreadyExists as ObjectAlreadyExists, Errors_ObjectNotFound as ObjectNotFound, Errors_ObjectUnprocessable as ObjectUnprocessable, Errors_RequestMalformed as RequestMalformed, Errors_RequestUnauthorized as RequestUnauthorized, Errors_ServerError as ServerError, Errors_TypesenseError as TypesenseError }; +} + +declare const _default: { + Client: typeof Client; + SearchClient: typeof SearchClient; + Errors: typeof Errors; +}; + +export { Client, Errors, SearchClient, _default as default }; diff --git a/dist/Typesense.min.js b/dist/Typesense.min.js new file mode 100644 index 00000000..c629e230 --- /dev/null +++ b/dist/Typesense.min.js @@ -0,0 +1,9 @@ +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};var _loglevel = require('loglevel'); var be = _interopRequireWildcard(_loglevel);var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||be,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var _http = require('http');var _https = require('https');var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new (0, _http.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new (0, _https.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=_axios2.default.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await _axios2.default.call(void 0, l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,_optionalChain([m, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message])));throw this.customErrorForResponse(m,_optionalChain([m, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]))}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(_optionalChain([l, 'access', _6 => _6.response, 'optionalAccess', _7 => _7.data]))}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` +`)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} + It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object + + Please try reducing the number of keys in your document, or using CURL to import your data. + `):new Error(n)}else r=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se});if(Array.isArray(e)){let n=s.split(` +`).map(I=>JSON.parse(I)),o=n.filter(I=>I.success===!1);if(o.length>0)throw new f(`${n.length-o.length} documents imported successfully, ${o.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n);return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se})).split(` +`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};var _crypto = require('crypto');var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(_crypto.createHmac.call(void 0, "sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Di={Client:le,SearchClient:ce,Errors:he};exports.Client = le; exports.Errors = he; exports.SearchClient = ce; exports.default = Di; +//# sourceMappingURL=Typesense.min.js.map \ No newline at end of file diff --git a/dist/Typesense.min.js.map b/dist/Typesense.min.js.map new file mode 100644 index 00000000..d9cbdbfa --- /dev/null +++ b/dist/Typesense.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["/home/fanis/code/typesense/typesense-js/dist/Typesense.min.js","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/MultiSearch.ts"],"names":["Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","importResults","Configuration","options","node","logger","key","array","i","j","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException"],"mappings":"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","file":"/home/fanis/code/typesense/typesense-js/dist/Typesense.min.js","sourcesContent":[null,"import * as logger from \"loglevel\";\nimport { Logger, LogLevelDesc } from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: LogLevelDesc;\n logger?: Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: Logger;\n readonly logLevel: LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n"]} \ No newline at end of file diff --git a/dist/Typesense.min.mjs b/dist/Typesense.min.mjs new file mode 100644 index 00000000..5a14d597 --- /dev/null +++ b/dist/Typesense.min.mjs @@ -0,0 +1,9 @@ +var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};import*as be from"loglevel";var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||be,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};import fe from"axios";import{Agent as xe}from"http";import{Agent as Te}from"https";var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new xe({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new Te({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=fe.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await fe(l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,m.data?.message));throw this.customErrorForResponse(m,m.data?.message)}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(l.response?.data)}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` +`)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} + It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object + + Please try reducing the number of keys in your document, or using CURL to import your data. + `):new Error(n)}else r=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se});if(Array.isArray(e)){let n=s.split(` +`).map(I=>JSON.parse(I)),o=n.filter(I=>I.success===!1);if(o.length>0)throw new f(`${n.length-o.length} documents imported successfully, ${o.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n);return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se})).split(` +`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};import{createHmac as He}from"crypto";var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(He("sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Di={Client:le,SearchClient:ce,Errors:he};export{le as Client,he as Errors,ce as SearchClient,Di as default}; +//# sourceMappingURL=Typesense.min.mjs.map \ No newline at end of file diff --git a/dist/Typesense.min.mjs.map b/dist/Typesense.min.mjs.map new file mode 100644 index 00000000..d12b7406 --- /dev/null +++ b/dist/Typesense.min.mjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Collections.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/Client.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense.ts"],"sourcesContent":["import * as logger from \"loglevel\";\nimport { Logger, LogLevelDesc } from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: LogLevelDesc;\n logger?: Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: Logger;\n readonly logLevel: LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n this.responseCache.delete(oldestEntry);\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n this.responsePromiseCache.delete(oldestEntry);\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n for (const key in searchParameters) {\n if (Array.isArray(searchParameters[key])) {\n additionalQueryParams[key] = searchParameters[key].join(\",\");\n }\n }\n const queryParams = Object.assign(\n {},\n searchParameters,\n additionalQueryParams\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Overrides.RESOURCEPATH}/${this.overrideId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Synonyms.RESOURCEPATH}/${this.synonymId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Documents.RESOURCEPATH}/${this.documentId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${aliasName}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${this.name}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const paramsJSON = JSON.stringify(parameters);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(private id: number, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | string,\n queryParameters: Record = {}\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema\n ): Promise {\n return this.apiCall.put(this.endpointPath(presetId), params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${this.presetId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${this.stopwordId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${this.id}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import Client from \"./Typesense/Client\";\nimport SearchClient from \"./Typesense/SearchClient\";\nimport * as Errors from \"./Typesense/Errors\";\n\nexport { Client, SearchClient, Errors };\nexport default { Client, SearchClient, Errors };\n"],"mappings":"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","names":["logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","axios","HTTPAgent","HTTPSAgent","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","source","axios","response","error","candidateNode","i","isDueForHealthcheck","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RESOURCEPATH","Collections","apiCall","schema","options","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","key","queryParams","operation","Collections","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","createHmac","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","Typesense_default","Client","SearchClient","Errors_exports"]} \ No newline at end of file diff --git a/lib/Typesense.d.mts b/lib/Typesense.d.mts new file mode 100644 index 00000000..4654ff7a --- /dev/null +++ b/lib/Typesense.d.mts @@ -0,0 +1,1084 @@ +import { LogLevelDesc, Logger } from 'loglevel'; +import { Agent } from 'http'; +import { Agent as Agent$1 } from 'https'; +import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; +import { ReadStream } from 'fs'; + +interface NodeConfiguration { + host: string; + port: number; + protocol: string; + path?: string; + url?: string; +} +interface NodeConfigurationWithHostname { + host: string; + port: number; + protocol: string; + path?: string; +} +interface NodeConfigurationWithUrl { + url: string; +} +interface ConfigurationOptions { + apiKey: string; + nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + randomizeNodes?: boolean; + /** + * @deprecated + * masterNode is now consolidated to nodes, starting with Typesense Server v0.12' + */ + masterNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + /** + * @deprecated + * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12' + */ + readReplicaNodes?: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + connectionTimeoutSeconds?: number; + timeoutSeconds?: number; + healthcheckIntervalSeconds?: number; + numRetries?: number; + retryIntervalSeconds?: number; + sendApiKeyAsQueryParam?: boolean | undefined; + useServerSideSearchCache?: boolean; + cacheSearchResultsForSeconds?: number; + additionalHeaders?: Record; + logLevel?: LogLevelDesc; + logger?: Logger; + /** + * Set a custom HTTP Agent + * + * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors + * Usage: + * const { Agent: HTTPAgent } = require("http"); + * ... + * httpAgent: new HTTPAgent({ keepAlive: true }), + * @type {HTTPAgent} + */ + httpAgent?: Agent; + /** + * Set a custom HTTPS Agent + * + * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors + * Usage: + * const { Agent: HTTPSAgent } = require("https"); + * ... + * httpsAgent: new HTTPSAgent({ keepAlive: true }), + * @type {HTTPSAgent} + */ + httpsAgent?: Agent$1; + /** + * Set a custom paramsSerializer + * + * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config + * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397 + * @type {any} + */ + paramsSerializer?: any; +} +declare class Configuration { + readonly nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + readonly nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + readonly connectionTimeoutSeconds: number; + readonly healthcheckIntervalSeconds: number; + readonly numRetries: number; + readonly retryIntervalSeconds: number; + readonly apiKey: string; + readonly sendApiKeyAsQueryParam?: boolean; + readonly cacheSearchResultsForSeconds: number; + readonly useServerSideSearchCache: boolean; + readonly logger: Logger; + readonly logLevel: LogLevelDesc; + readonly additionalHeaders?: Record; + readonly httpAgent?: Agent; + readonly httpsAgent?: Agent$1; + readonly paramsSerializer?: any; + constructor(options: ConfigurationOptions); + validate(): boolean; + private validateNodes; + private isNodeMissingAnyParameters; + private setDefaultPathInNode; + private setDefaultPortInNode; + private showDeprecationWarnings; + private shuffleArray; +} + +declare class TypesenseError extends Error { + httpStatus?: number; + constructor(message?: string); +} + +interface Node extends NodeConfiguration { + isHealthy: boolean; + index: string | number; +} +declare class ApiCall { + private configuration; + private readonly apiKey; + private readonly nodes; + private readonly nearestNode; + private readonly connectionTimeoutSeconds; + private readonly healthcheckIntervalSeconds; + private readonly retryIntervalSeconds; + private readonly sendApiKeyAsQueryParam?; + private readonly numRetriesPerRequest; + private readonly additionalUserHeaders?; + private readonly logger; + private currentNodeIndex; + constructor(configuration: Configuration); + get(endpoint: string, queryParameters?: any, { abortSignal, responseType, }?: { + abortSignal?: any; + responseType?: AxiosRequestConfig["responseType"] | undefined; + }): Promise; + delete(endpoint: string, queryParameters?: any): Promise; + post(endpoint: string, bodyParameters?: any, queryParameters?: any, additionalHeaders?: any): Promise; + put(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + patch(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + performRequest(requestType: Method, endpoint: string, { queryParameters, bodyParameters, additionalHeaders, abortSignal, responseType, skipConnectionTimeout, enableKeepAlive, }: { + queryParameters?: any; + bodyParameters?: any; + additionalHeaders?: any; + abortSignal?: any; + responseType?: AxiosRequestConfig["responseType"] | undefined; + skipConnectionTimeout?: boolean; + enableKeepAlive?: boolean | undefined; + }): Promise; + getNextNode(requestNumber?: number): Node; + nodeDueForHealthcheck(node: any, requestNumber?: number): boolean; + initializeMetadataForNodes(): void; + setNodeHealthcheck(node: any, isHealthy: any): void; + uriFor(endpoint: string, node: any): string; + defaultHeaders(): any; + timer(seconds: any): Promise; + customErrorForResponse(response: AxiosResponse, messageFromServer: string): TypesenseError; +} + +declare class RequestWithCache { + private responseCache; + private responsePromiseCache; + clearCache(): void; + perform(requestContext: any, requestFunction: (...params: any) => unknown, requestFunctionArguments: any[], cacheOptions: CacheOptions): Promise; +} +interface CacheOptions { + cacheResponseForSeconds?: number; + maxSize?: number; +} + +declare class SearchOnlyDocuments implements SearchableDocuments { + protected collectionName: string; + protected apiCall: ApiCall; + protected configuration: Configuration; + protected requestWithCache: RequestWithCache; + constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); + clearCache(): void; + search(searchParameters: SearchParams | SearchParamsWithPreset, { cacheSearchResultsForSeconds, abortSignal, }?: SearchOptions): Promise>; + protected endpointPath(operation?: string): string; + static get RESOURCEPATH(): string; +} + +interface DeleteQuery { + filter_by?: string; + batch_size?: number; + ignore_not_found?: boolean; +} +interface DeleteResponse { + num_deleted: number; +} +interface ImportResponseSuccess { + success: true; +} +interface ImportResponseFail { + success: false; + error: string; + document: DocumentSchema; + code: number; +} +type ImportResponse = ImportResponseSuccess | ImportResponseFail; +type DocumentSchema = Record; +interface SearchParamsWithPreset extends Partial { + preset: string; +} +type OperationMode = "off" | "always" | "fallback"; +interface SearchParams { + q?: string; + query_by?: string | string[]; + query_by_weights?: string | number[]; + prefix?: string | boolean | boolean[]; + filter_by?: string; + enable_lazy_filter?: boolean; + sort_by?: string | string[]; + facet_by?: string | string[]; + max_facet_values?: number; + facet_sample_threshold?: number; + facet_sample_percent?: number; + facet_query?: string; + facet_query_num_typos?: number; + facet_return_parent?: string; + page?: number; + per_page?: number; + group_by?: string | string[]; + group_limit?: number; + group_missing_values?: boolean; + include_fields?: string | string[]; + exclude_fields?: string | string[]; + highlight_fields?: string | string[]; + highlight_full_fields?: string | string[]; + highlight_affix_num_tokens?: number; + highlight_start_tag?: string; + highlight_end_tag?: string; + enable_highlight_v1?: boolean; + snippet_threshold?: number; + num_typos?: string | number | number[]; + min_len_1typo?: number; + min_len_2typo?: number; + split_join_tokens?: OperationMode; + exhaustive_search?: boolean; + drop_tokens_threshold?: number; + typo_tokens_threshold?: number; + pinned_hits?: string | string[]; + hidden_hits?: string | string[]; + limit_hits?: number; + pre_segmented_query?: boolean; + enable_overrides?: boolean; + prioritize_exact_match?: boolean; + prioritize_token_position?: boolean; + prioritize_num_matching_fields?: boolean; + search_cutoff_ms?: number; + use_cache?: boolean; + max_candidates?: number; + infix?: OperationMode | OperationMode[]; + preset?: string; + text_match_type?: "max_score" | "max_weight"; + vector_query?: string; + "x-typesense-api-key"?: string; + "x-typesense-user-id"?: string; + offset?: number; + limit?: number; + stopwords?: string; + conversation?: boolean; + conversation_model_id?: string; + conversation_id?: string; + voice_query?: string; +} +type SearchResponseHighlightObject = { + matched_tokens?: string[]; + snippet?: string; + value?: string; +}; +type SearchResponseHighlight = T extends string | number ? SearchResponseHighlightObject : { + [TAttribute in keyof T]?: SearchResponseHighlight; +}; +interface SearchResponseHit { + curated?: true; + highlights?: [ + { + field: keyof T; + snippet?: string; + value?: string; + snippets?: string[]; + indices?: number[]; + matched_tokens: string[][] | string[]; + } + ]; + highlight: SearchResponseHighlight; + document: T; + text_match: number; + text_match_info?: { + best_field_score: string; + best_field_weight: number; + fields_matched: number; + score: string; + tokens_matched: number; + }; +} +interface SearchResponseFacetCountSchema { + counts: { + count: number; + highlighted: string; + value: string; + }[]; + field_name: keyof T; + stats: { + avg?: number; + max?: number; + min?: number; + sum?: number; + }; +} +interface SearchResponseRequestParams { + collection_name?: string; + q?: string; + page?: number; + per_page?: number; + first_q?: string; + voice_query?: { + transcribed_query?: string; + }; +} +interface SearchResponse { + facet_counts?: SearchResponseFacetCountSchema[]; + found: number; + found_docs?: number; + out_of: number; + page: number; + request_params: SearchResponseRequestParams; + search_time_ms: number; + search_cutoff?: boolean; + hits?: SearchResponseHit[]; + grouped_hits?: { + group_key: string[]; + hits: SearchResponseHit[]; + found?: number; + }[]; + conversation?: { + answer: string; + conversation_history: { + conversation: object[]; + id: string; + last_updated: number; + ttl: number; + }; + conversation_id: string; + query: string; + }; + error?: string; + code?: number; +} +interface DocumentWriteParameters { + dirty_values?: "coerce_or_reject" | "coerce_or_drop" | "drop" | "reject"; + action?: "create" | "update" | "upsert" | "emplace"; +} +interface UpdateByFilterParameters { + filter_by?: string; +} +interface UpdateByFilterResponse { + num_updated: number; +} +interface DocumentImportParameters extends DocumentWriteParameters { + batch_size?: number; + return_doc?: boolean; + return_id?: boolean; +} +interface DocumentsExportParameters { + filter_by?: string; + include_fields?: string; + exclude_fields?: string; +} +interface SearchableDocuments { + search(searchParameters: SearchParams | SearchParamsWithPreset, options: SearchOptions): Promise>; + clearCache(): void; +} +interface WriteableDocuments { + create(document: T, options: DocumentWriteParameters): Promise; + upsert(document: T, options: DocumentWriteParameters): Promise; + update(document: T, options: DocumentWriteParameters): Promise; + delete(query: DeleteQuery): Promise; + import(documents: T[] | string, options: DocumentWriteParameters): Promise; + export(options: DocumentsExportParameters): Promise; +} +interface SearchOptions { + cacheSearchResultsForSeconds?: number; + abortSignal?: AbortSignal | null; +} +declare class Documents extends SearchOnlyDocuments implements WriteableDocuments { + constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); + create(document: T, options?: DocumentWriteParameters): Promise; + upsert(document: T, options?: DocumentWriteParameters): Promise; + update(document: T, options: UpdateByFilterParameters): Promise; + update(document: T, options: DocumentWriteParameters): Promise; + delete(query?: DeleteQuery): Promise; + createMany(documents: T[], options?: DocumentImportParameters): Promise; + /** + * Import a set of documents in a batch. + * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects. + * @param options + * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results. + */ + import(documents: string, options?: DocumentImportParameters): Promise; + import(documents: T[], options?: DocumentImportParameters): Promise; + /** + * Imports documents from a NodeJS readable stream of JSONL. + */ + importStream(readableStream: ReadStream, options?: DocumentImportParameters): Promise; + /** + * Returns a JSONL string for all the documents in this collection + */ + export(options?: DocumentsExportParameters): Promise; + /** + * Returns a NodeJS readable stream of JSONL for all the documents in this collection. + */ + exportStream(options?: DocumentsExportParameters): Promise; +} + +interface OverrideSchema extends OverrideCreateSchema { + id: string; +} +interface OverrideDeleteSchema { + id: string; +} +declare class Override { + private collectionName; + private overrideId; + private apiCall; + constructor(collectionName: string, overrideId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface OverrideRuleQuerySchema { + query?: string; + match?: "exact" | "contains"; +} +interface OverrideRuleFilterSchema { + filter_by?: string; +} +interface OverrideRuleTagsSchema { + tags?: string[]; +} +interface OverrideCreateSchema { + rule: OverrideRuleQuerySchema & OverrideRuleFilterSchema & OverrideRuleTagsSchema; + filter_by?: string; + sort_by?: string; + remove_matched_tokens?: boolean; + replace_query?: string; + includes?: Array<{ + id: string; + position: number; + }>; + excludes?: Array<{ + id: string; + }>; + filter_curated_hits?: boolean; + effective_from_ts?: number; + effective_to_ts?: number; + stop_processing?: boolean; + metadata?: object; +} +interface OverridesRetrieveSchema { + overrides: OverrideSchema[]; +} +declare class Overrides { + private collectionName; + private apiCall; + constructor(collectionName: string, apiCall: ApiCall); + upsert(overrideId: string, params: OverrideCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface SynonymSchema extends SynonymCreateSchema { + id: string; +} +interface SynonymDeleteSchema { + id: string; +} +declare class Synonym { + private collectionName; + private synonymId; + private apiCall; + constructor(collectionName: string, synonymId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface SynonymCreateSchema { + synonyms: string[]; + root?: string; + locale?: string; + symbols_to_index?: string[]; +} +interface SynonymsRetrieveSchema { + synonyms: SynonymSchema[]; +} +declare class Synonyms { + private collectionName; + private apiCall; + constructor(collectionName: string, apiCall: ApiCall); + upsert(synonymId: string, params: SynonymCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Document { + private collectionName; + private documentId; + private apiCall; + constructor(collectionName: string, documentId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(options?: DeleteQuery): Promise; + update(partialDocument: Partial, options?: DocumentWriteParameters): Promise; + private endpointPath; +} + +type FieldType = "string" | "int32" | "int64" | "float" | "bool" | "geopoint" | "geopoint[]" | "string[]" | "int32[]" | "int64[]" | "float[]" | "bool[]" | "object" | "object[]" | "auto" | "string*" | "image"; +interface CollectionFieldSchema { + name: string; + type: FieldType; + optional?: boolean; + facet?: boolean; + index?: boolean; + sort?: boolean; + locale?: string; + infix?: boolean; + stem?: boolean; + num_dim?: number; + store?: boolean; + [t: string]: unknown; +} +interface CollectionSchema extends CollectionCreateSchema { + created_at: number; + num_documents: number; + num_memory_shards: number; +} +interface CollectionDropFieldSchema { + name: string; + drop: true; +} +interface CollectionUpdateSchema extends Partial> { + fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[]; +} +declare class Collection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + private individualDocuments; + private readonly _overrides; + private individualOverrides; + private readonly _synonyms; + private individualSynonyms; + constructor(name: string, apiCall: ApiCall, configuration: any); + retrieve(): Promise; + update(schema: CollectionUpdateSchema): Promise; + delete(): Promise; + exists(): Promise; + documents(): Documents; + documents(documentId: string): Document; + overrides(): Overrides; + overrides(overrideId: string): Override; + synonyms(): Synonyms; + synonyms(synonymId: string): Synonym; + private endpointPath; +} + +interface CollectionCreateSchema { + name: string; + default_sorting_field?: string; + fields?: CollectionFieldSchema[]; + symbols_to_index?: string[]; + token_separators?: string[]; + enable_nested_fields?: boolean; + metadata?: object; + voice_query_model?: { + model_name?: string; + }; +} +interface CollectionCreateOptions { + src_name?: string; +} +interface CollectionsRetrieveOptions { + exclude_fields?: string; +} +declare class Collections { + private apiCall; + constructor(apiCall: ApiCall); + create(schema: CollectionCreateSchema, options?: CollectionCreateOptions): Promise; + retrieve(options?: CollectionsRetrieveOptions): Promise; + static get RESOURCEPATH(): string; +} + +interface CollectionAliasCreateSchema { + collection_name: string; +} +interface CollectionAliasSchema extends CollectionAliasCreateSchema { + name: string; +} +interface CollectionAliasesResponseSchema { + aliases: CollectionAliasSchema[]; +} +declare class Aliases { + private apiCall; + constructor(apiCall: ApiCall); + upsert(name: string, mapping: CollectionAliasCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Alias { + private name; + private apiCall; + constructor(name: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface KeyCreateSchema { + actions: string[]; + collections: string[]; + description?: string; + value?: string; + value_prefix?: string; + expires_at?: number; +} +interface KeyDeleteSchema { + id: number; +} +interface KeySchema extends KeyCreateSchema { + id: number; +} +declare class Key { + private id; + private apiCall; + constructor(id: number, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface KeysRetrieveSchema { + keys: KeySchema[]; +} +interface GenerateScopedSearchKeyParams extends Partial { + expires_at?: number; + cache_ttl?: number; + limit_multi_searches?: number; +} +declare class Keys { + private apiCall; + constructor(apiCall: ApiCall); + create(params: KeyCreateSchema): Promise; + retrieve(): Promise; + generateScopedSearchKey(searchKey: string, parameters: GenerateScopedSearchKeyParams): string; + static get RESOURCEPATH(): string; +} + +interface DebugResponseSchema { + state: number; + version: string; +} +declare class Debug { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +interface MetricsResponse { + [key: `system_cpu${number}_active_percentage`]: string; + system_cpu_active_percentage: string; + system_disk_total_bytes: string; + system_disk_used_bytes: string; + system_memory_total_bytes: string; + system_memory_total_swap_bytes?: string; + system_memory_used_bytes: string; + system_memory_used_swap_bytes?: string; + system_network_received_bytes: string; + system_network_sent_bytes: string; + typesense_memory_active_bytes: string; + typesense_memory_allocated_bytes: string; + typesense_memory_fragmentation_ratio: string; + typesense_memory_mapped_bytes: string; + typesense_memory_metadata_bytes: string; + typesense_memory_resident_bytes: string; + typesense_memory_retained_bytes: string; +} +declare class Metrics$1 { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +interface EndpointStats { + [endpoint: string]: number; +} +interface StatsResponse { + delete_latency_ms?: number; + delete_requests_per_second?: number; + import_latency_ms?: number; + import_requests_per_second?: number; + latency_ms?: EndpointStats; + overloaded_requests_per_second?: number; + pending_write_batches?: number; + requests_per_second?: EndpointStats; + search_latency_ms?: number; + search_requests_per_second?: number; + total_requests_per_second?: number; + write_latency_ms?: number; + write_requests_per_second?: number; +} +declare class Metrics { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +interface HealthResponse { + ok: boolean; +} +declare class Health { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +declare class Operations { + private apiCall; + constructor(apiCall: ApiCall); + perform(operationName: "vote" | "snapshot" | "cache/clear" | string, queryParameters?: Record): Promise; +} + +interface MultiSearchRequestSchema extends SearchParams { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestsSchema { + searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; +} +interface MultiSearchResponse { + results: { + [Index in keyof T]: SearchResponse; + } & { + length: T["length"]; + }; +} +declare class MultiSearch { + private apiCall; + private configuration; + private useTextContentType; + private requestWithCache; + constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); + clearCache(): void; + perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { + cacheSearchResultsForSeconds?: number; + }): Promise>; +} + +interface PresetSchema extends PresetCreateSchema { + name: string; +} +interface PresetDeleteSchema { + name: string; +} +declare class Preset { + private presetId; + private apiCall; + constructor(presetId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface PresetCreateSchema { + value: SearchParams | MultiSearchRequestsSchema; +} +interface PresetsRetrieveSchema { + presets: PresetSchema[]; +} +declare class Presets { + private apiCall; + constructor(apiCall: ApiCall); + upsert(presetId: string, params: PresetCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface AnalyticsRuleCreateSchema { + type: "popular_queries" | "nohits_queries" | "counter"; + params: { + source: { + collections: string[]; + events?: Array<{ + type: string; + weight: number; + name: string; + }>; + }; + expand_query?: boolean; + destination: { + collection: string; + counter_field?: string; + }; + limit?: number; + }; +} +interface AnalyticsRuleDeleteSchema { + name: string; +} +interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema { + name: string; +} +declare class AnalyticsRule { + private name; + private apiCall; + constructor(name: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface AnalyticsRulesRetrieveSchema { + rules: AnalyticsRuleSchema[]; +} +declare class AnalyticsRules { + private readonly apiCall; + constructor(apiCall: ApiCall); + upsert(name: string, params: AnalyticsRuleCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface AnalyticsEventCreateSchema { + type: string; + name: string; + data?: object; +} + +declare class AnalyticsEvents { + private readonly apiCall; + constructor(apiCall: ApiCall); + create(params: AnalyticsEventCreateSchema): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Analytics { + private readonly apiCall; + private readonly _analyticsRules; + private readonly individualAnalyticsRules; + private readonly _analyticsEvents; + constructor(apiCall: ApiCall); + rules(id?: string): AnalyticsRules | AnalyticsRule; + events(): AnalyticsEvents; + static get RESOURCEPATH(): string; +} + +interface StopwordSchema extends StopwordCreateSchema { + id: string; + stopwords: string[]; + locale?: string; +} +interface StopwordDeleteSchema { + id: string; +} +declare class Stopword { + private stopwordId; + private apiCall; + constructor(stopwordId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface StopwordCreateSchema { + stopwords: string[]; + locale?: string; +} +interface StopwordsRetrieveSchema { + stopwords: StopwordSchema[]; +} +declare class Stopwords { + private apiCall; + constructor(apiCall: ApiCall); + upsert(stopwordId: string, params: StopwordCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface ConversationModelCreateSchema { + id?: string; + model_name: string; + api_key?: string; + system_prompt?: string; + max_bytes: number; + history_collection?: string; +} +interface ConversationModelDeleteSchema { + id: string; +} +interface ConversationModelSchema extends ConversationModelCreateSchema { + id: string; +} +declare class ConversationModel { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + update(params: ConversationModelCreateSchema): Promise; + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +declare class ConversationModels { + private readonly apiCall; + constructor(apiCall: ApiCall); + create(params: ConversationModelCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface ConversationDeleteSchema { + id: number; +} +interface ConversationUpdateSchema { + ttl: number; +} +interface ConversationSchema { + id: number; + conversation: object[]; + last_updated: number; + ttl: number; +} +declare class Conversation { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + retrieve(): Promise; + update(params: ConversationUpdateSchema): Promise; + delete(): Promise; + private endpointPath; +} + +interface ConversationsRetrieveSchema { + conversations: ConversationSchema[]; +} +declare class Conversations { + private readonly apiCall; + private readonly _conversationsModels; + private readonly individualConversationModels; + constructor(apiCall: ApiCall); + retrieve(): Promise; + models(): ConversationModels; + models(id: string): ConversationModel; + static get RESOURCEPATH(): string; +} + +declare class Client { + configuration: Configuration; + apiCall: ApiCall; + debug: Debug; + metrics: Metrics$1; + stats: Metrics; + health: Health; + operations: Operations; + multiSearch: MultiSearch; + analytics: Analytics; + private readonly _collections; + private readonly individualCollections; + private readonly _aliases; + private readonly individualAliases; + private readonly _keys; + private readonly individualKeys; + private readonly _presets; + private readonly individualPresets; + private readonly _stopwords; + private readonly individualStopwords; + private readonly _conversations; + private readonly individualConversations; + constructor(options: ConfigurationOptions); + collections(): Collections; + collections = object>(collectionName: string): Collection; + aliases(): Aliases; + aliases(aliasName: string): Alias; + keys(): Keys; + keys(id: number): Key; + presets(): Presets; + presets(id: string): Preset; + stopwords(): Stopwords; + stopwords(id: string): Stopword; + conversations(): Conversations; + conversations(id: string): Conversation; +} + +declare class SearchOnlyCollection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + constructor(name: string, apiCall: ApiCall, configuration: any); + documents(): SearchableDocuments; +} + +declare class SearchClient { + readonly multiSearch: MultiSearch; + private readonly configuration; + private readonly apiCall; + private readonly individualCollections; + constructor(options: ConfigurationOptions); + clearCache(): void; + collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; +} + +declare class HTTPError extends TypesenseError { +} + +declare class MissingConfigurationError extends TypesenseError { +} + +declare class ObjectAlreadyExists extends TypesenseError { +} + +declare class ObjectNotFound extends TypesenseError { +} + +declare class ObjectUnprocessable extends TypesenseError { +} + +declare class RequestMalformed extends TypesenseError { +} + +declare class RequestUnauthorized extends TypesenseError { +} + +declare class ServerError extends TypesenseError { +} + +declare class ImportError extends TypesenseError { + importResults: ImportResponse[]; + constructor(message: string, importResults: ImportResponse[]); +} + +type Errors_HTTPError = HTTPError; +declare const Errors_HTTPError: typeof HTTPError; +type Errors_ImportError = ImportError; +declare const Errors_ImportError: typeof ImportError; +type Errors_MissingConfigurationError = MissingConfigurationError; +declare const Errors_MissingConfigurationError: typeof MissingConfigurationError; +type Errors_ObjectAlreadyExists = ObjectAlreadyExists; +declare const Errors_ObjectAlreadyExists: typeof ObjectAlreadyExists; +type Errors_ObjectNotFound = ObjectNotFound; +declare const Errors_ObjectNotFound: typeof ObjectNotFound; +type Errors_ObjectUnprocessable = ObjectUnprocessable; +declare const Errors_ObjectUnprocessable: typeof ObjectUnprocessable; +type Errors_RequestMalformed = RequestMalformed; +declare const Errors_RequestMalformed: typeof RequestMalformed; +type Errors_RequestUnauthorized = RequestUnauthorized; +declare const Errors_RequestUnauthorized: typeof RequestUnauthorized; +type Errors_ServerError = ServerError; +declare const Errors_ServerError: typeof ServerError; +type Errors_TypesenseError = TypesenseError; +declare const Errors_TypesenseError: typeof TypesenseError; +declare namespace Errors { + export { Errors_HTTPError as HTTPError, Errors_ImportError as ImportError, Errors_MissingConfigurationError as MissingConfigurationError, Errors_ObjectAlreadyExists as ObjectAlreadyExists, Errors_ObjectNotFound as ObjectNotFound, Errors_ObjectUnprocessable as ObjectUnprocessable, Errors_RequestMalformed as RequestMalformed, Errors_RequestUnauthorized as RequestUnauthorized, Errors_ServerError as ServerError, Errors_TypesenseError as TypesenseError }; +} + +declare const _default: { + Client: typeof Client; + SearchClient: typeof SearchClient; + Errors: typeof Errors; +}; + +export { Client, Errors, SearchClient, _default as default }; diff --git a/lib/Typesense.d.ts b/lib/Typesense.d.ts new file mode 100644 index 00000000..4654ff7a --- /dev/null +++ b/lib/Typesense.d.ts @@ -0,0 +1,1084 @@ +import { LogLevelDesc, Logger } from 'loglevel'; +import { Agent } from 'http'; +import { Agent as Agent$1 } from 'https'; +import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; +import { ReadStream } from 'fs'; + +interface NodeConfiguration { + host: string; + port: number; + protocol: string; + path?: string; + url?: string; +} +interface NodeConfigurationWithHostname { + host: string; + port: number; + protocol: string; + path?: string; +} +interface NodeConfigurationWithUrl { + url: string; +} +interface ConfigurationOptions { + apiKey: string; + nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + randomizeNodes?: boolean; + /** + * @deprecated + * masterNode is now consolidated to nodes, starting with Typesense Server v0.12' + */ + masterNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + /** + * @deprecated + * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12' + */ + readReplicaNodes?: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + connectionTimeoutSeconds?: number; + timeoutSeconds?: number; + healthcheckIntervalSeconds?: number; + numRetries?: number; + retryIntervalSeconds?: number; + sendApiKeyAsQueryParam?: boolean | undefined; + useServerSideSearchCache?: boolean; + cacheSearchResultsForSeconds?: number; + additionalHeaders?: Record; + logLevel?: LogLevelDesc; + logger?: Logger; + /** + * Set a custom HTTP Agent + * + * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors + * Usage: + * const { Agent: HTTPAgent } = require("http"); + * ... + * httpAgent: new HTTPAgent({ keepAlive: true }), + * @type {HTTPAgent} + */ + httpAgent?: Agent; + /** + * Set a custom HTTPS Agent + * + * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors + * Usage: + * const { Agent: HTTPSAgent } = require("https"); + * ... + * httpsAgent: new HTTPSAgent({ keepAlive: true }), + * @type {HTTPSAgent} + */ + httpsAgent?: Agent$1; + /** + * Set a custom paramsSerializer + * + * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config + * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397 + * @type {any} + */ + paramsSerializer?: any; +} +declare class Configuration { + readonly nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + readonly nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + readonly connectionTimeoutSeconds: number; + readonly healthcheckIntervalSeconds: number; + readonly numRetries: number; + readonly retryIntervalSeconds: number; + readonly apiKey: string; + readonly sendApiKeyAsQueryParam?: boolean; + readonly cacheSearchResultsForSeconds: number; + readonly useServerSideSearchCache: boolean; + readonly logger: Logger; + readonly logLevel: LogLevelDesc; + readonly additionalHeaders?: Record; + readonly httpAgent?: Agent; + readonly httpsAgent?: Agent$1; + readonly paramsSerializer?: any; + constructor(options: ConfigurationOptions); + validate(): boolean; + private validateNodes; + private isNodeMissingAnyParameters; + private setDefaultPathInNode; + private setDefaultPortInNode; + private showDeprecationWarnings; + private shuffleArray; +} + +declare class TypesenseError extends Error { + httpStatus?: number; + constructor(message?: string); +} + +interface Node extends NodeConfiguration { + isHealthy: boolean; + index: string | number; +} +declare class ApiCall { + private configuration; + private readonly apiKey; + private readonly nodes; + private readonly nearestNode; + private readonly connectionTimeoutSeconds; + private readonly healthcheckIntervalSeconds; + private readonly retryIntervalSeconds; + private readonly sendApiKeyAsQueryParam?; + private readonly numRetriesPerRequest; + private readonly additionalUserHeaders?; + private readonly logger; + private currentNodeIndex; + constructor(configuration: Configuration); + get(endpoint: string, queryParameters?: any, { abortSignal, responseType, }?: { + abortSignal?: any; + responseType?: AxiosRequestConfig["responseType"] | undefined; + }): Promise; + delete(endpoint: string, queryParameters?: any): Promise; + post(endpoint: string, bodyParameters?: any, queryParameters?: any, additionalHeaders?: any): Promise; + put(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + patch(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + performRequest(requestType: Method, endpoint: string, { queryParameters, bodyParameters, additionalHeaders, abortSignal, responseType, skipConnectionTimeout, enableKeepAlive, }: { + queryParameters?: any; + bodyParameters?: any; + additionalHeaders?: any; + abortSignal?: any; + responseType?: AxiosRequestConfig["responseType"] | undefined; + skipConnectionTimeout?: boolean; + enableKeepAlive?: boolean | undefined; + }): Promise; + getNextNode(requestNumber?: number): Node; + nodeDueForHealthcheck(node: any, requestNumber?: number): boolean; + initializeMetadataForNodes(): void; + setNodeHealthcheck(node: any, isHealthy: any): void; + uriFor(endpoint: string, node: any): string; + defaultHeaders(): any; + timer(seconds: any): Promise; + customErrorForResponse(response: AxiosResponse, messageFromServer: string): TypesenseError; +} + +declare class RequestWithCache { + private responseCache; + private responsePromiseCache; + clearCache(): void; + perform(requestContext: any, requestFunction: (...params: any) => unknown, requestFunctionArguments: any[], cacheOptions: CacheOptions): Promise; +} +interface CacheOptions { + cacheResponseForSeconds?: number; + maxSize?: number; +} + +declare class SearchOnlyDocuments implements SearchableDocuments { + protected collectionName: string; + protected apiCall: ApiCall; + protected configuration: Configuration; + protected requestWithCache: RequestWithCache; + constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); + clearCache(): void; + search(searchParameters: SearchParams | SearchParamsWithPreset, { cacheSearchResultsForSeconds, abortSignal, }?: SearchOptions): Promise>; + protected endpointPath(operation?: string): string; + static get RESOURCEPATH(): string; +} + +interface DeleteQuery { + filter_by?: string; + batch_size?: number; + ignore_not_found?: boolean; +} +interface DeleteResponse { + num_deleted: number; +} +interface ImportResponseSuccess { + success: true; +} +interface ImportResponseFail { + success: false; + error: string; + document: DocumentSchema; + code: number; +} +type ImportResponse = ImportResponseSuccess | ImportResponseFail; +type DocumentSchema = Record; +interface SearchParamsWithPreset extends Partial { + preset: string; +} +type OperationMode = "off" | "always" | "fallback"; +interface SearchParams { + q?: string; + query_by?: string | string[]; + query_by_weights?: string | number[]; + prefix?: string | boolean | boolean[]; + filter_by?: string; + enable_lazy_filter?: boolean; + sort_by?: string | string[]; + facet_by?: string | string[]; + max_facet_values?: number; + facet_sample_threshold?: number; + facet_sample_percent?: number; + facet_query?: string; + facet_query_num_typos?: number; + facet_return_parent?: string; + page?: number; + per_page?: number; + group_by?: string | string[]; + group_limit?: number; + group_missing_values?: boolean; + include_fields?: string | string[]; + exclude_fields?: string | string[]; + highlight_fields?: string | string[]; + highlight_full_fields?: string | string[]; + highlight_affix_num_tokens?: number; + highlight_start_tag?: string; + highlight_end_tag?: string; + enable_highlight_v1?: boolean; + snippet_threshold?: number; + num_typos?: string | number | number[]; + min_len_1typo?: number; + min_len_2typo?: number; + split_join_tokens?: OperationMode; + exhaustive_search?: boolean; + drop_tokens_threshold?: number; + typo_tokens_threshold?: number; + pinned_hits?: string | string[]; + hidden_hits?: string | string[]; + limit_hits?: number; + pre_segmented_query?: boolean; + enable_overrides?: boolean; + prioritize_exact_match?: boolean; + prioritize_token_position?: boolean; + prioritize_num_matching_fields?: boolean; + search_cutoff_ms?: number; + use_cache?: boolean; + max_candidates?: number; + infix?: OperationMode | OperationMode[]; + preset?: string; + text_match_type?: "max_score" | "max_weight"; + vector_query?: string; + "x-typesense-api-key"?: string; + "x-typesense-user-id"?: string; + offset?: number; + limit?: number; + stopwords?: string; + conversation?: boolean; + conversation_model_id?: string; + conversation_id?: string; + voice_query?: string; +} +type SearchResponseHighlightObject = { + matched_tokens?: string[]; + snippet?: string; + value?: string; +}; +type SearchResponseHighlight = T extends string | number ? SearchResponseHighlightObject : { + [TAttribute in keyof T]?: SearchResponseHighlight; +}; +interface SearchResponseHit { + curated?: true; + highlights?: [ + { + field: keyof T; + snippet?: string; + value?: string; + snippets?: string[]; + indices?: number[]; + matched_tokens: string[][] | string[]; + } + ]; + highlight: SearchResponseHighlight; + document: T; + text_match: number; + text_match_info?: { + best_field_score: string; + best_field_weight: number; + fields_matched: number; + score: string; + tokens_matched: number; + }; +} +interface SearchResponseFacetCountSchema { + counts: { + count: number; + highlighted: string; + value: string; + }[]; + field_name: keyof T; + stats: { + avg?: number; + max?: number; + min?: number; + sum?: number; + }; +} +interface SearchResponseRequestParams { + collection_name?: string; + q?: string; + page?: number; + per_page?: number; + first_q?: string; + voice_query?: { + transcribed_query?: string; + }; +} +interface SearchResponse { + facet_counts?: SearchResponseFacetCountSchema[]; + found: number; + found_docs?: number; + out_of: number; + page: number; + request_params: SearchResponseRequestParams; + search_time_ms: number; + search_cutoff?: boolean; + hits?: SearchResponseHit[]; + grouped_hits?: { + group_key: string[]; + hits: SearchResponseHit[]; + found?: number; + }[]; + conversation?: { + answer: string; + conversation_history: { + conversation: object[]; + id: string; + last_updated: number; + ttl: number; + }; + conversation_id: string; + query: string; + }; + error?: string; + code?: number; +} +interface DocumentWriteParameters { + dirty_values?: "coerce_or_reject" | "coerce_or_drop" | "drop" | "reject"; + action?: "create" | "update" | "upsert" | "emplace"; +} +interface UpdateByFilterParameters { + filter_by?: string; +} +interface UpdateByFilterResponse { + num_updated: number; +} +interface DocumentImportParameters extends DocumentWriteParameters { + batch_size?: number; + return_doc?: boolean; + return_id?: boolean; +} +interface DocumentsExportParameters { + filter_by?: string; + include_fields?: string; + exclude_fields?: string; +} +interface SearchableDocuments { + search(searchParameters: SearchParams | SearchParamsWithPreset, options: SearchOptions): Promise>; + clearCache(): void; +} +interface WriteableDocuments { + create(document: T, options: DocumentWriteParameters): Promise; + upsert(document: T, options: DocumentWriteParameters): Promise; + update(document: T, options: DocumentWriteParameters): Promise; + delete(query: DeleteQuery): Promise; + import(documents: T[] | string, options: DocumentWriteParameters): Promise; + export(options: DocumentsExportParameters): Promise; +} +interface SearchOptions { + cacheSearchResultsForSeconds?: number; + abortSignal?: AbortSignal | null; +} +declare class Documents extends SearchOnlyDocuments implements WriteableDocuments { + constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); + create(document: T, options?: DocumentWriteParameters): Promise; + upsert(document: T, options?: DocumentWriteParameters): Promise; + update(document: T, options: UpdateByFilterParameters): Promise; + update(document: T, options: DocumentWriteParameters): Promise; + delete(query?: DeleteQuery): Promise; + createMany(documents: T[], options?: DocumentImportParameters): Promise; + /** + * Import a set of documents in a batch. + * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects. + * @param options + * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results. + */ + import(documents: string, options?: DocumentImportParameters): Promise; + import(documents: T[], options?: DocumentImportParameters): Promise; + /** + * Imports documents from a NodeJS readable stream of JSONL. + */ + importStream(readableStream: ReadStream, options?: DocumentImportParameters): Promise; + /** + * Returns a JSONL string for all the documents in this collection + */ + export(options?: DocumentsExportParameters): Promise; + /** + * Returns a NodeJS readable stream of JSONL for all the documents in this collection. + */ + exportStream(options?: DocumentsExportParameters): Promise; +} + +interface OverrideSchema extends OverrideCreateSchema { + id: string; +} +interface OverrideDeleteSchema { + id: string; +} +declare class Override { + private collectionName; + private overrideId; + private apiCall; + constructor(collectionName: string, overrideId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface OverrideRuleQuerySchema { + query?: string; + match?: "exact" | "contains"; +} +interface OverrideRuleFilterSchema { + filter_by?: string; +} +interface OverrideRuleTagsSchema { + tags?: string[]; +} +interface OverrideCreateSchema { + rule: OverrideRuleQuerySchema & OverrideRuleFilterSchema & OverrideRuleTagsSchema; + filter_by?: string; + sort_by?: string; + remove_matched_tokens?: boolean; + replace_query?: string; + includes?: Array<{ + id: string; + position: number; + }>; + excludes?: Array<{ + id: string; + }>; + filter_curated_hits?: boolean; + effective_from_ts?: number; + effective_to_ts?: number; + stop_processing?: boolean; + metadata?: object; +} +interface OverridesRetrieveSchema { + overrides: OverrideSchema[]; +} +declare class Overrides { + private collectionName; + private apiCall; + constructor(collectionName: string, apiCall: ApiCall); + upsert(overrideId: string, params: OverrideCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface SynonymSchema extends SynonymCreateSchema { + id: string; +} +interface SynonymDeleteSchema { + id: string; +} +declare class Synonym { + private collectionName; + private synonymId; + private apiCall; + constructor(collectionName: string, synonymId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface SynonymCreateSchema { + synonyms: string[]; + root?: string; + locale?: string; + symbols_to_index?: string[]; +} +interface SynonymsRetrieveSchema { + synonyms: SynonymSchema[]; +} +declare class Synonyms { + private collectionName; + private apiCall; + constructor(collectionName: string, apiCall: ApiCall); + upsert(synonymId: string, params: SynonymCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Document { + private collectionName; + private documentId; + private apiCall; + constructor(collectionName: string, documentId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(options?: DeleteQuery): Promise; + update(partialDocument: Partial, options?: DocumentWriteParameters): Promise; + private endpointPath; +} + +type FieldType = "string" | "int32" | "int64" | "float" | "bool" | "geopoint" | "geopoint[]" | "string[]" | "int32[]" | "int64[]" | "float[]" | "bool[]" | "object" | "object[]" | "auto" | "string*" | "image"; +interface CollectionFieldSchema { + name: string; + type: FieldType; + optional?: boolean; + facet?: boolean; + index?: boolean; + sort?: boolean; + locale?: string; + infix?: boolean; + stem?: boolean; + num_dim?: number; + store?: boolean; + [t: string]: unknown; +} +interface CollectionSchema extends CollectionCreateSchema { + created_at: number; + num_documents: number; + num_memory_shards: number; +} +interface CollectionDropFieldSchema { + name: string; + drop: true; +} +interface CollectionUpdateSchema extends Partial> { + fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[]; +} +declare class Collection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + private individualDocuments; + private readonly _overrides; + private individualOverrides; + private readonly _synonyms; + private individualSynonyms; + constructor(name: string, apiCall: ApiCall, configuration: any); + retrieve(): Promise; + update(schema: CollectionUpdateSchema): Promise; + delete(): Promise; + exists(): Promise; + documents(): Documents; + documents(documentId: string): Document; + overrides(): Overrides; + overrides(overrideId: string): Override; + synonyms(): Synonyms; + synonyms(synonymId: string): Synonym; + private endpointPath; +} + +interface CollectionCreateSchema { + name: string; + default_sorting_field?: string; + fields?: CollectionFieldSchema[]; + symbols_to_index?: string[]; + token_separators?: string[]; + enable_nested_fields?: boolean; + metadata?: object; + voice_query_model?: { + model_name?: string; + }; +} +interface CollectionCreateOptions { + src_name?: string; +} +interface CollectionsRetrieveOptions { + exclude_fields?: string; +} +declare class Collections { + private apiCall; + constructor(apiCall: ApiCall); + create(schema: CollectionCreateSchema, options?: CollectionCreateOptions): Promise; + retrieve(options?: CollectionsRetrieveOptions): Promise; + static get RESOURCEPATH(): string; +} + +interface CollectionAliasCreateSchema { + collection_name: string; +} +interface CollectionAliasSchema extends CollectionAliasCreateSchema { + name: string; +} +interface CollectionAliasesResponseSchema { + aliases: CollectionAliasSchema[]; +} +declare class Aliases { + private apiCall; + constructor(apiCall: ApiCall); + upsert(name: string, mapping: CollectionAliasCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Alias { + private name; + private apiCall; + constructor(name: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface KeyCreateSchema { + actions: string[]; + collections: string[]; + description?: string; + value?: string; + value_prefix?: string; + expires_at?: number; +} +interface KeyDeleteSchema { + id: number; +} +interface KeySchema extends KeyCreateSchema { + id: number; +} +declare class Key { + private id; + private apiCall; + constructor(id: number, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface KeysRetrieveSchema { + keys: KeySchema[]; +} +interface GenerateScopedSearchKeyParams extends Partial { + expires_at?: number; + cache_ttl?: number; + limit_multi_searches?: number; +} +declare class Keys { + private apiCall; + constructor(apiCall: ApiCall); + create(params: KeyCreateSchema): Promise; + retrieve(): Promise; + generateScopedSearchKey(searchKey: string, parameters: GenerateScopedSearchKeyParams): string; + static get RESOURCEPATH(): string; +} + +interface DebugResponseSchema { + state: number; + version: string; +} +declare class Debug { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +interface MetricsResponse { + [key: `system_cpu${number}_active_percentage`]: string; + system_cpu_active_percentage: string; + system_disk_total_bytes: string; + system_disk_used_bytes: string; + system_memory_total_bytes: string; + system_memory_total_swap_bytes?: string; + system_memory_used_bytes: string; + system_memory_used_swap_bytes?: string; + system_network_received_bytes: string; + system_network_sent_bytes: string; + typesense_memory_active_bytes: string; + typesense_memory_allocated_bytes: string; + typesense_memory_fragmentation_ratio: string; + typesense_memory_mapped_bytes: string; + typesense_memory_metadata_bytes: string; + typesense_memory_resident_bytes: string; + typesense_memory_retained_bytes: string; +} +declare class Metrics$1 { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +interface EndpointStats { + [endpoint: string]: number; +} +interface StatsResponse { + delete_latency_ms?: number; + delete_requests_per_second?: number; + import_latency_ms?: number; + import_requests_per_second?: number; + latency_ms?: EndpointStats; + overloaded_requests_per_second?: number; + pending_write_batches?: number; + requests_per_second?: EndpointStats; + search_latency_ms?: number; + search_requests_per_second?: number; + total_requests_per_second?: number; + write_latency_ms?: number; + write_requests_per_second?: number; +} +declare class Metrics { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +interface HealthResponse { + ok: boolean; +} +declare class Health { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} + +declare class Operations { + private apiCall; + constructor(apiCall: ApiCall); + perform(operationName: "vote" | "snapshot" | "cache/clear" | string, queryParameters?: Record): Promise; +} + +interface MultiSearchRequestSchema extends SearchParams { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestsSchema { + searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; +} +interface MultiSearchResponse { + results: { + [Index in keyof T]: SearchResponse; + } & { + length: T["length"]; + }; +} +declare class MultiSearch { + private apiCall; + private configuration; + private useTextContentType; + private requestWithCache; + constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); + clearCache(): void; + perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { + cacheSearchResultsForSeconds?: number; + }): Promise>; +} + +interface PresetSchema extends PresetCreateSchema { + name: string; +} +interface PresetDeleteSchema { + name: string; +} +declare class Preset { + private presetId; + private apiCall; + constructor(presetId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface PresetCreateSchema { + value: SearchParams | MultiSearchRequestsSchema; +} +interface PresetsRetrieveSchema { + presets: PresetSchema[]; +} +declare class Presets { + private apiCall; + constructor(apiCall: ApiCall); + upsert(presetId: string, params: PresetCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface AnalyticsRuleCreateSchema { + type: "popular_queries" | "nohits_queries" | "counter"; + params: { + source: { + collections: string[]; + events?: Array<{ + type: string; + weight: number; + name: string; + }>; + }; + expand_query?: boolean; + destination: { + collection: string; + counter_field?: string; + }; + limit?: number; + }; +} +interface AnalyticsRuleDeleteSchema { + name: string; +} +interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema { + name: string; +} +declare class AnalyticsRule { + private name; + private apiCall; + constructor(name: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface AnalyticsRulesRetrieveSchema { + rules: AnalyticsRuleSchema[]; +} +declare class AnalyticsRules { + private readonly apiCall; + constructor(apiCall: ApiCall); + upsert(name: string, params: AnalyticsRuleCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface AnalyticsEventCreateSchema { + type: string; + name: string; + data?: object; +} + +declare class AnalyticsEvents { + private readonly apiCall; + constructor(apiCall: ApiCall); + create(params: AnalyticsEventCreateSchema): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Analytics { + private readonly apiCall; + private readonly _analyticsRules; + private readonly individualAnalyticsRules; + private readonly _analyticsEvents; + constructor(apiCall: ApiCall); + rules(id?: string): AnalyticsRules | AnalyticsRule; + events(): AnalyticsEvents; + static get RESOURCEPATH(): string; +} + +interface StopwordSchema extends StopwordCreateSchema { + id: string; + stopwords: string[]; + locale?: string; +} +interface StopwordDeleteSchema { + id: string; +} +declare class Stopword { + private stopwordId; + private apiCall; + constructor(stopwordId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +interface StopwordCreateSchema { + stopwords: string[]; + locale?: string; +} +interface StopwordsRetrieveSchema { + stopwords: StopwordSchema[]; +} +declare class Stopwords { + private apiCall; + constructor(apiCall: ApiCall); + upsert(stopwordId: string, params: StopwordCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface ConversationModelCreateSchema { + id?: string; + model_name: string; + api_key?: string; + system_prompt?: string; + max_bytes: number; + history_collection?: string; +} +interface ConversationModelDeleteSchema { + id: string; +} +interface ConversationModelSchema extends ConversationModelCreateSchema { + id: string; +} +declare class ConversationModel { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + update(params: ConversationModelCreateSchema): Promise; + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} + +declare class ConversationModels { + private readonly apiCall; + constructor(apiCall: ApiCall); + create(params: ConversationModelCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +interface ConversationDeleteSchema { + id: number; +} +interface ConversationUpdateSchema { + ttl: number; +} +interface ConversationSchema { + id: number; + conversation: object[]; + last_updated: number; + ttl: number; +} +declare class Conversation { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + retrieve(): Promise; + update(params: ConversationUpdateSchema): Promise; + delete(): Promise; + private endpointPath; +} + +interface ConversationsRetrieveSchema { + conversations: ConversationSchema[]; +} +declare class Conversations { + private readonly apiCall; + private readonly _conversationsModels; + private readonly individualConversationModels; + constructor(apiCall: ApiCall); + retrieve(): Promise; + models(): ConversationModels; + models(id: string): ConversationModel; + static get RESOURCEPATH(): string; +} + +declare class Client { + configuration: Configuration; + apiCall: ApiCall; + debug: Debug; + metrics: Metrics$1; + stats: Metrics; + health: Health; + operations: Operations; + multiSearch: MultiSearch; + analytics: Analytics; + private readonly _collections; + private readonly individualCollections; + private readonly _aliases; + private readonly individualAliases; + private readonly _keys; + private readonly individualKeys; + private readonly _presets; + private readonly individualPresets; + private readonly _stopwords; + private readonly individualStopwords; + private readonly _conversations; + private readonly individualConversations; + constructor(options: ConfigurationOptions); + collections(): Collections; + collections = object>(collectionName: string): Collection; + aliases(): Aliases; + aliases(aliasName: string): Alias; + keys(): Keys; + keys(id: number): Key; + presets(): Presets; + presets(id: string): Preset; + stopwords(): Stopwords; + stopwords(id: string): Stopword; + conversations(): Conversations; + conversations(id: string): Conversation; +} + +declare class SearchOnlyCollection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + constructor(name: string, apiCall: ApiCall, configuration: any); + documents(): SearchableDocuments; +} + +declare class SearchClient { + readonly multiSearch: MultiSearch; + private readonly configuration; + private readonly apiCall; + private readonly individualCollections; + constructor(options: ConfigurationOptions); + clearCache(): void; + collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; +} + +declare class HTTPError extends TypesenseError { +} + +declare class MissingConfigurationError extends TypesenseError { +} + +declare class ObjectAlreadyExists extends TypesenseError { +} + +declare class ObjectNotFound extends TypesenseError { +} + +declare class ObjectUnprocessable extends TypesenseError { +} + +declare class RequestMalformed extends TypesenseError { +} + +declare class RequestUnauthorized extends TypesenseError { +} + +declare class ServerError extends TypesenseError { +} + +declare class ImportError extends TypesenseError { + importResults: ImportResponse[]; + constructor(message: string, importResults: ImportResponse[]); +} + +type Errors_HTTPError = HTTPError; +declare const Errors_HTTPError: typeof HTTPError; +type Errors_ImportError = ImportError; +declare const Errors_ImportError: typeof ImportError; +type Errors_MissingConfigurationError = MissingConfigurationError; +declare const Errors_MissingConfigurationError: typeof MissingConfigurationError; +type Errors_ObjectAlreadyExists = ObjectAlreadyExists; +declare const Errors_ObjectAlreadyExists: typeof ObjectAlreadyExists; +type Errors_ObjectNotFound = ObjectNotFound; +declare const Errors_ObjectNotFound: typeof ObjectNotFound; +type Errors_ObjectUnprocessable = ObjectUnprocessable; +declare const Errors_ObjectUnprocessable: typeof ObjectUnprocessable; +type Errors_RequestMalformed = RequestMalformed; +declare const Errors_RequestMalformed: typeof RequestMalformed; +type Errors_RequestUnauthorized = RequestUnauthorized; +declare const Errors_RequestUnauthorized: typeof RequestUnauthorized; +type Errors_ServerError = ServerError; +declare const Errors_ServerError: typeof ServerError; +type Errors_TypesenseError = TypesenseError; +declare const Errors_TypesenseError: typeof TypesenseError; +declare namespace Errors { + export { Errors_HTTPError as HTTPError, Errors_ImportError as ImportError, Errors_MissingConfigurationError as MissingConfigurationError, Errors_ObjectAlreadyExists as ObjectAlreadyExists, Errors_ObjectNotFound as ObjectNotFound, Errors_ObjectUnprocessable as ObjectUnprocessable, Errors_RequestMalformed as RequestMalformed, Errors_RequestUnauthorized as RequestUnauthorized, Errors_ServerError as ServerError, Errors_TypesenseError as TypesenseError }; +} + +declare const _default: { + Client: typeof Client; + SearchClient: typeof SearchClient; + Errors: typeof Errors; +}; + +export { Client, Errors, SearchClient, _default as default }; diff --git a/lib/Typesense.min.js b/lib/Typesense.min.js new file mode 100644 index 00000000..c629e230 --- /dev/null +++ b/lib/Typesense.min.js @@ -0,0 +1,9 @@ +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};var _loglevel = require('loglevel'); var be = _interopRequireWildcard(_loglevel);var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||be,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var _http = require('http');var _https = require('https');var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new (0, _http.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new (0, _https.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=_axios2.default.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await _axios2.default.call(void 0, l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,_optionalChain([m, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message])));throw this.customErrorForResponse(m,_optionalChain([m, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]))}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(_optionalChain([l, 'access', _6 => _6.response, 'optionalAccess', _7 => _7.data]))}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` +`)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} + It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object + + Please try reducing the number of keys in your document, or using CURL to import your data. + `):new Error(n)}else r=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se});if(Array.isArray(e)){let n=s.split(` +`).map(I=>JSON.parse(I)),o=n.filter(I=>I.success===!1);if(o.length>0)throw new f(`${n.length-o.length} documents imported successfully, ${o.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n);return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se})).split(` +`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};var _crypto = require('crypto');var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(_crypto.createHmac.call(void 0, "sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Di={Client:le,SearchClient:ce,Errors:he};exports.Client = le; exports.Errors = he; exports.SearchClient = ce; exports.default = Di; +//# sourceMappingURL=Typesense.min.js.map \ No newline at end of file diff --git a/lib/Typesense.min.js.map b/lib/Typesense.min.js.map new file mode 100644 index 00000000..55e62084 --- /dev/null +++ b/lib/Typesense.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["/home/fanis/code/typesense/typesense-js/lib/Typesense.min.js","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/MultiSearch.ts"],"names":["Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","importResults","Configuration","options","node","logger","key","array","i","j","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException"],"mappings":"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","file":"/home/fanis/code/typesense/typesense-js/lib/Typesense.min.js","sourcesContent":[null,"import * as logger from \"loglevel\";\nimport { Logger, LogLevelDesc } from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: LogLevelDesc;\n logger?: Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: Logger;\n readonly logLevel: LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n"]} \ No newline at end of file diff --git a/lib/Typesense.min.mjs b/lib/Typesense.min.mjs new file mode 100644 index 00000000..5a14d597 --- /dev/null +++ b/lib/Typesense.min.mjs @@ -0,0 +1,9 @@ +var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};import*as be from"loglevel";var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||be,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};import fe from"axios";import{Agent as xe}from"http";import{Agent as Te}from"https";var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new xe({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new Te({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=fe.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await fe(l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,m.data?.message));throw this.customErrorForResponse(m,m.data?.message)}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(l.response?.data)}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` +`)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} + It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object + + Please try reducing the number of keys in your document, or using CURL to import your data. + `):new Error(n)}else r=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se});if(Array.isArray(e)){let n=s.split(` +`).map(I=>JSON.parse(I)),o=n.filter(I=>I.success===!1);if(o.length>0)throw new f(`${n.length-o.length} documents imported successfully, ${o.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n);return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se})).split(` +`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};import{createHmac as He}from"crypto";var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(He("sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Di={Client:le,SearchClient:ce,Errors:he};export{le as Client,he as Errors,ce as SearchClient,Di as default}; +//# sourceMappingURL=Typesense.min.mjs.map \ No newline at end of file diff --git a/lib/Typesense.min.mjs.map b/lib/Typesense.min.mjs.map new file mode 100644 index 00000000..d12b7406 --- /dev/null +++ b/lib/Typesense.min.mjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Collections.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/Client.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense.ts"],"sourcesContent":["import * as logger from \"loglevel\";\nimport { Logger, LogLevelDesc } from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: LogLevelDesc;\n logger?: Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: Logger;\n readonly logLevel: LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n this.responseCache.delete(oldestEntry);\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n this.responsePromiseCache.delete(oldestEntry);\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n for (const key in searchParameters) {\n if (Array.isArray(searchParameters[key])) {\n additionalQueryParams[key] = searchParameters[key].join(\",\");\n }\n }\n const queryParams = Object.assign(\n {},\n searchParameters,\n additionalQueryParams\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Overrides.RESOURCEPATH}/${this.overrideId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Synonyms.RESOURCEPATH}/${this.synonymId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Documents.RESOURCEPATH}/${this.documentId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${aliasName}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${this.name}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const paramsJSON = JSON.stringify(parameters);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(private id: number, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | string,\n queryParameters: Record = {}\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema\n ): Promise {\n return this.apiCall.put(this.endpointPath(presetId), params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${this.presetId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${this.stopwordId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${this.id}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import Client from \"./Typesense/Client\";\nimport SearchClient from \"./Typesense/SearchClient\";\nimport * as Errors from \"./Typesense/Errors\";\n\nexport { Client, SearchClient, Errors };\nexport default { Client, SearchClient, Errors };\n"],"mappings":"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","names":["logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","axios","HTTPAgent","HTTPSAgent","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","source","axios","response","error","candidateNode","i","isDueForHealthcheck","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RESOURCEPATH","Collections","apiCall","schema","options","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","key","queryParams","operation","Collections","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","createHmac","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","Typesense_default","Client","SearchClient","Errors_exports"]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a190ee91..b2236b78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,8 @@ "babel-plugin-istanbul": "^6.1.1", "babelify": "^10.0.0", "browserify": "^17.0.0", + "browserslist": "^4.23.3", + "browserslist-to-esbuild": "^2.1.1", "chai": "~4.3.10", "chai-as-promised": "^7.1.1", "common-shakeify": "^1.1.2", @@ -52,6 +54,7 @@ "ts-loader": "^9.5.0", "ts-mocha": "^10.0.0", "tsify": "^5.0.4", + "tsup": "^8.2.4", "typescript": "^5.2.2", "vinyl-buffer": "^1.0.1", "vinyl-source-stream": "^2.0.0", @@ -1922,6 +1925,414 @@ "node": ">=10.0.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -2132,6 +2543,109 @@ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -2266,17 +2780,252 @@ "node": ">= 8" } }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.0.tgz", + "integrity": "sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.0.tgz", + "integrity": "sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.0.tgz", + "integrity": "sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.0.tgz", + "integrity": "sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.0.tgz", + "integrity": "sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.0.tgz", + "integrity": "sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.0.tgz", + "integrity": "sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.0.tgz", + "integrity": "sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.0.tgz", + "integrity": "sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.0.tgz", + "integrity": "sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.0.tgz", + "integrity": "sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.0.tgz", + "integrity": "sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.0.tgz", + "integrity": "sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.0.tgz", + "integrity": "sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.0.tgz", + "integrity": "sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.0.tgz", + "integrity": "sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==", + "cpu": [ + "x64" + ], "dev": true, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, "node_modules/@types/eslint": { "version": "8.56.2", @@ -3728,9 +4477,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, "funding": [ { @@ -3746,11 +4495,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -3759,6 +4509,25 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/browserslist-to-esbuild": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/browserslist-to-esbuild/-/browserslist-to-esbuild-2.1.1.tgz", + "integrity": "sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "meow": "^13.0.0" + }, + "bin": { + "browserslist-to-esbuild": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "browserslist": "*" + } + }, "node_modules/buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", @@ -3787,6 +4556,32 @@ "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, + "node_modules/bundle-require": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.0.0.tgz", + "integrity": "sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.18" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cached-path-relative": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", @@ -4185,6 +4980,16 @@ "typedarray": "^0.0.6" } }, + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", @@ -4610,11 +5415,19 @@ "readable-stream": "^2.0.2" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, "node_modules/electron-to-chromium": { - "version": "1.4.648", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz", - "integrity": "sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg==", - "dev": true + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", + "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", + "dev": true, + "license": "ISC" }, "node_modules/elliptic": { "version": "6.6.0", @@ -4868,11 +5681,52 @@ "es6-symbol": "^3.1.1" } }, + "node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5693,6 +6547,30 @@ "safe-buffer": "^5.1.1" } }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -6045,6 +6923,19 @@ "node": ">=8.0.0" } }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -6404,6 +7295,16 @@ "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -7216,6 +8117,22 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -7254,6 +8171,16 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7387,6 +8314,36 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -7432,6 +8389,13 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true, + "license": "MIT" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -7613,6 +8577,19 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-source-map": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", @@ -7688,6 +8665,16 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -7724,6 +8711,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", @@ -8003,6 +9000,18 @@ "queue-tick": "^1.0.0" } }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanobench": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz", @@ -8105,10 +9114,11 @@ } }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -8119,6 +9129,19 @@ "node": ">=0.10.0" } }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -8467,6 +9490,22 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -8556,6 +9595,13 @@ "node": ">=8" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -8673,6 +9719,30 @@ "node": ">= 0.8.0" } }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -8708,10 +9778,11 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -8801,6 +9872,49 @@ "node": ">=4" } }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -9259,6 +10373,42 @@ "inherits": "^2.0.1" } }, + "node_modules/rollup": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.0.tgz", + "integrity": "sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.21.0", + "@rollup/rollup-android-arm64": "4.21.0", + "@rollup/rollup-darwin-arm64": "4.21.0", + "@rollup/rollup-darwin-x64": "4.21.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.0", + "@rollup/rollup-linux-arm-musleabihf": "4.21.0", + "@rollup/rollup-linux-arm64-gnu": "4.21.0", + "@rollup/rollup-linux-arm64-musl": "4.21.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.0", + "@rollup/rollup-linux-riscv64-gnu": "4.21.0", + "@rollup/rollup-linux-s390x-gnu": "4.21.0", + "@rollup/rollup-linux-x64-gnu": "4.21.0", + "@rollup/rollup-linux-x64-musl": "4.21.0", + "@rollup/rollup-win32-arm64-msvc": "4.21.0", + "@rollup/rollup-win32-ia32-msvc": "4.21.0", + "@rollup/rollup-win32-x64-msvc": "4.21.0", + "fsevents": "~2.3.2" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -9713,14 +10863,30 @@ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/string-width": { + "node_modules/string-width-cjs": { + "name": "string-width", "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9787,6 +10953,20 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -9796,6 +10976,16 @@ "node": ">=8" } }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -9817,6 +11007,96 @@ "minimist": "^1.1.0" } }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -9993,6 +11273,29 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -10048,6 +11351,26 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/transform-ast": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", @@ -10069,6 +11392,16 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/ts-api-utils": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", @@ -10081,6 +11414,13 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/ts-loader": { "version": "9.5.1", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", @@ -10375,6 +11715,114 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, + "node_modules/tsup": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.2.4.tgz", + "integrity": "sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-require": "^5.0.0", + "cac": "^6.7.14", + "chokidar": "^3.6.0", + "consola": "^3.2.3", + "debug": "^4.3.5", + "esbuild": "^0.23.0", + "execa": "^5.1.1", + "globby": "^11.1.0", + "joycon": "^3.1.1", + "picocolors": "^1.0.1", + "postcss-load-config": "^6.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.19.0", + "source-map": "0.8.0-beta.0", + "sucrase": "^3.35.0", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/tsup/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/tsup/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/tsup/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", @@ -10597,9 +12045,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -10615,9 +12063,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -10738,6 +12187,13 @@ "node": ">=10.13.0" } }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/webpack": { "version": "5.94.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", @@ -10879,6 +12335,18 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -10965,6 +12433,61 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", diff --git a/package.json b/package.json index 3e25095d..22d8c708 100644 --- a/package.json +++ b/package.json @@ -20,13 +20,26 @@ "url": "https://github.com/dcantu476" } ], - "main": "lib/Typesense.js", + "main": "lib/Typesense.min.js", "types": "lib/Typesense.d.ts", + "module": "lib/Typesense.min.mjs", "browser": { "crypto": false, "http": false, "https": false }, + "exports": { + ".": { + "types": "./lib/Typesense.d.mts", + "import": "./lib/Typesense.min.mjs", + "require": "./lib/Typesense.min.mjs" + }, + "./dist": { + "types": "./dist/Typesense.d.ts", + "import": "./dist/Typesense.min.mjs", + "require": "./dist/Typesense.min.js" + } + }, "files": [ "lib/", "dist/", @@ -60,6 +73,8 @@ "babel-plugin-istanbul": "^6.1.1", "babelify": "^10.0.0", "browserify": "^17.0.0", + "browserslist": "^4.23.3", + "browserslist-to-esbuild": "^2.1.1", "chai": "~4.3.10", "chai-as-promised": "^7.1.1", "common-shakeify": "^1.1.2", @@ -80,6 +95,7 @@ "ts-loader": "^9.5.0", "ts-mocha": "^10.0.0", "tsify": "^5.0.4", + "tsup": "^8.2.4", "typescript": "^5.2.2", "vinyl-buffer": "^1.0.1", "vinyl-source-stream": "^2.0.0", @@ -90,7 +106,7 @@ "format": "prettier --write \"(src|test|doc)/**/*.(ts|json|js)\"", "pretest": "eslint .", "test": "nyc --reporter=html --reporter=text ts-mocha --require @babel/register --recursive", - "build": "npm run build:tsc && npm run build:web:dev && npm run build:web:prod", + "build": "tsup", "build:tsc": "tsc", "build:web:dev": "webpack --config webpack.config.js --mode development", "build:web:prod": "webpack --config webpack.config.js --mode production", diff --git a/tsup.config.ts b/tsup.config.ts new file mode 100644 index 00000000..58fc85f2 --- /dev/null +++ b/tsup.config.ts @@ -0,0 +1,48 @@ +import { defineConfig } from "tsup"; +import type { Options } from "tsup"; +import browserList from "browserslist-to-esbuild"; +import { nodeModulesPolyfillPlugin } from "esbuild-plugins-node-modules-polyfill"; +import { builtinModules } from "module"; + +export default defineConfig([ + { + target: browserList(["defaults"]) as Options["target"], + entry: ["src/Typesense.ts"], + sourcemap: true, + clean: true, + format: ["cjs", "esm"], + dts: true, + outDir: "dist", + minify: true, + outExtension({ format }) { + return { + js: `.min.${format === "cjs" ? "js" : "mjs"}`, + }; + }, + splitting: true, + platform: "browser", + external: [...builtinModules], + esbuildPlugins: [ + nodeModulesPolyfillPlugin({ + fallback: "empty", + }), + ], + }, + { + target: browserList(["defaults"]) as Options["target"], + entry: ["src/Typesense.ts"], + clean: true, + format: ["esm", "cjs"], + dts: true, + sourcemap: true, + outDir: "lib", + minify: true, + platform: "node", + outExtension({ format }) { + return { + js: `.min.${format === "cjs" ? "js" : "mjs"}`, + }; + }, + splitting: true, + }, +]); diff --git a/typesense-data/db/000009.sst b/typesense-data/db/000009.sst new file mode 100644 index 0000000000000000000000000000000000000000..27d83971906e806b3b136283b33817cf96c846db GIT binary patch literal 2067 zcmc&#&ub(_6z-Z#GCj#;lG!l}2E@?hIMbw)*-U0)l-=we0;?-4%d&(}RCm9g6zLz6 zs+!F7hIkVM5%CZ3Ab9iQLGYvpFM^lg*_(fW7Z<##uexV4i3h>;V8i^VSMR-g@74Ex zZ7j6c?;VgiBYV!R(*X>?r$fONNUOWiuml7kAohTsTHV7VZ8)U@B#l_#>c)dGydd*r z|9}+p98RJB-Q3&MOQJrDIY=@y$?XYX3X?Nsb)ELsPWw)K+vzkc9|ATA6_trlJnqqe zL+D#wD;`7?qJEg9fVDI%h?yG#jX~-xnHQEAuuww7!k^G(-brq!D(wTNz^IAe;W_$v zfM<^*cMAk7a2^L77vrrk@mM&Hk6EPu<^7~ITQ;n`h^v64uXqx(@X8=q+ygp3 zVw_d?cjbURL^l@H=U$dXq*>l^nYmB0yE7mfec%-<*b^4;Xsy<9UqR$H6b zdzoCtzq^+~tZ-!i`;{OwIHDFAa|1ER09_kGIf5t=DV4`e_=ww9!;)#_CZVJ%nIJ{; zOC=`|Qwe=07(xJD505Si_2PTiI913wHTfp`&nJzy{xBBT_pkXGKbG`Pw*BDyh0l$Z z+WO;%)R=4f)&0E+U7FR~hH=CACqCMkMXkLC?;Gnyk$5N4cWoD$abmknf^RF$MmvMJ zt>LL-R+mX11%r?5fQJe+ST|PdWO$sQ>j|V&vtuq3F9`=xYzHjjVQO>VxLqvi;f)1h z-dsfu$%YWZ8ES%S-%Aw?xrBYKF4<0{w1{FPk$vwZ+B#m;%})u=ny%m4Y`R_m zUdM46xEr;_%5fsqG^Q2ofVaI9bik=CzasNVOt%j@k9Hp4fBNLv*8PXhyH6jq_nm5K zHi>P;BlzvhkH4KW%LSh)W=sAYE=%PF0wJKh>dTVEyfusW2zI92IN~hqs~<3I!6bOS zS(GtfC8IpT4k7NTW23xC5)m2a3i3mo|<@=p#tANc73CS8tOu77h?k z()J<5g7B4-_}~+>N+J+Fu#-NZs`}EX&(x3?PYz?7 z2+md@2WKl)l0%Y?EkV{ zu9U`LhY`ZV!y0T2U;R$(D=}Xy=#o`xBhEw6+w$HKHo))n#kBFlxHd||$rGioyvM&>UXY~k0EqZ#-relm4lsiDzKbP2qF4<%$0f z1pFWZ2$}>4BEl&Uy5HI2&%YyC-z*xv-_t%s2l(p4n`F=8vcM*@u_cpFaNi_VdY8MDY^QWwgXB zMG+mZbV{1d=Ti~8`t=BXz4`He2N!M81A|?zgWHpX7LCk-1v#wSW-GLkHiz&erBt#m ze3S)mj^aVEyIbA!i5GgF>$m^N))}R%9D?B(ds8CeM@fsNflP?ldPElkg+k0?cLeYh6?FR9y#D_zJ-U{MH-bfOSW_&@Z$w!(OXg0dt=5srq_jhcOb{pB-%_51mY!$v(+=lIP4iph$u HP(p{lVc7`- literal 0 HcmV?d00001 diff --git a/typesense-data/state/log/log_meta b/typesense-data/state/log/log_meta new file mode 100644 index 0000000000000000000000000000000000000000..fd18fc2289d39fd4133cabc76b32a729e2397ad6 GIT binary patch literal 6 NcmZQzU|`~41ONaX01N;C literal 0 HcmV?d00001 diff --git a/typesense-data/state/meta/raft_meta b/typesense-data/state/meta/raft_meta new file mode 100644 index 0000000000000000000000000000000000000000..4f06a9e429d69f667e2ea3762e1239db5d43dbf4 GIT binary patch literal 28 gcmZQzV36Qo5)v^qH_|gS*E7&Fva&EVFb5G905Bs2OaK4? literal 0 HcmV?d00001 diff --git a/typesense-data/state/snapshot/snapshot_00000000000000000002/__raft_snapshot_meta b/typesense-data/state/snapshot/snapshot_00000000000000000002/__raft_snapshot_meta new file mode 100644 index 0000000000000000000000000000000000000000..d5483116f777e99156e64bea312164cc7ace3aa4 GIT binary patch literal 150 zcmZQzV3@=u#la-NBqd^KZlq^uu4kZUWMyG!U=AWIgrvB{Qj+3}^AZb+GxAIH4M4zB zuei8Gh(So4OBh+sIW#E9)h`4nAZ3;V8i^VSMR-g@74Ex zZ7j6c?;VgiBYV!R(*X>?r$fONNUOWiuml7kAohTsTHV7VZ8)U@B#l_#>c)dGydd*r z|9}+p98RJB-Q3&MOQJrDIY=@y$?XYX3X?Nsb)ELsPWw)K+vzkc9|ATA6_trlJnqqe zL+D#wD;`7?qJEg9fVDI%h?yG#jX~-xnHQEAuuww7!k^G(-brq!D(wTNz^IAe;W_$v zfM<^*cMAk7a2^L77vrrk@mM&Hk6EPu<^7~ITQ;n`h^v64uXqx(@X8=q+ygp3 zVw_d?cjbURL^l@H=U$dXq*>l^nYmB0yE7mfec%-<*b^4;Xsy<9UqR$H6b zdzoCtzq^+~tZ-!i`;{OwIHDFAa|1ER09_kGIf5t=DV4`e_=ww9!;)#_CZVJ%nIJ{; zOC=`|Qwe=07(xJD505Si_2PTiI913wHTfp`&nJzy{xBBT_pkXGKbG`Pw*BDyh0l$Z z+WO;%)R=4f)&0E+U7FR~hH=CACqCMkMXkLC?;Gnyk$5N4cWoD$abmknf^RF$MmvMJ zt>LL-R+mX11%r?5fQJe+ST|PdWO$sQ>j|V&vtuq3F9`=xYzHjjVQO>VxLqvi;f)1h z-dsfu$%YWZ8ES%S-%Aw?xrBYKF4<0{w1{FPk$vwZ+B#m;%})u=ny%m4Y`R_m zUdM46xEr;_%5fsqG^Q2ofVaI9bik=CzasNVOt%j@k9Hp4fBNLv*8PXhyH6jq_nm5K zHi>P;BlzvhkH4KW%LSh)W=sAYE=%PF0wJKh>dTVEyfusW2zI92IN~hqs~<3I!6bOS zS(GtfC8IpT4k7NTW23xC5)m2a3i3mo|<@=p#tANc73CS8tOu77h?k z()J<5g7B4-_}~+>N+J+Fu#-NZs`}EX&(x3?PYz?7 z2+md@2WKl)l0%Y?EkV{ zu9U`LhY`ZV!y0T2U;R$(D=}Xy=#o`xBhEw6+w$HKHo))n#kBFlxHd||$rGioyvM&>UXY~k0EqZ#-relm4lsiDzKbP2qF4<%$0f z1pFWZ2$ Date: Wed, 21 Aug 2024 12:03:07 +0300 Subject: [PATCH 03/45] build: add cjs plugin or esbuild --- package-lock.json | 316 +++++++++++++++++++++++++++++++--------------- package.json | 2 + tsup.config.ts | 4 +- 3 files changed, 222 insertions(+), 100 deletions(-) diff --git a/package-lock.json b/package-lock.json index b2236b78..10d2f981 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/register": "^7.22.15", + "@hyrious/esbuild-plugin-commonjs": "^0.2.4", "@types/node": "^20.8.9", "@typescript-eslint/eslint-plugin": "^6.9.1", "@typescript-eslint/parser": "^6.9.1", @@ -39,6 +40,7 @@ "common-shakeify": "^1.1.2", "core-js": "^3.33.2", "del": "^7.1.0", + "esbuild-plugins-node-modules-polyfill": "^1.6.5", "eslint": "^8.52.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-import": "^2.29.0", @@ -1926,9 +1928,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", - "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", "cpu": [ "ppc64" ], @@ -1943,9 +1945,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", - "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", "cpu": [ "arm" ], @@ -1960,9 +1962,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", - "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", "cpu": [ "arm64" ], @@ -1977,9 +1979,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", - "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", "cpu": [ "x64" ], @@ -1994,9 +1996,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", - "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", "cpu": [ "arm64" ], @@ -2011,9 +2013,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", - "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", "cpu": [ "x64" ], @@ -2028,9 +2030,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", - "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", "cpu": [ "arm64" ], @@ -2045,9 +2047,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", - "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", "cpu": [ "x64" ], @@ -2062,9 +2064,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", - "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", "cpu": [ "arm" ], @@ -2079,9 +2081,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", - "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", "cpu": [ "arm64" ], @@ -2096,9 +2098,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", - "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", "cpu": [ "ia32" ], @@ -2113,9 +2115,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", - "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", "cpu": [ "loong64" ], @@ -2130,9 +2132,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", - "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", "cpu": [ "mips64el" ], @@ -2147,9 +2149,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", - "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", "cpu": [ "ppc64" ], @@ -2164,9 +2166,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", - "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", "cpu": [ "riscv64" ], @@ -2181,9 +2183,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", - "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", "cpu": [ "s390x" ], @@ -2198,9 +2200,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", - "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", "cpu": [ "x64" ], @@ -2215,9 +2217,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", - "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", "cpu": [ "x64" ], @@ -2232,9 +2234,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", - "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", "cpu": [ "arm64" ], @@ -2249,9 +2251,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", - "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", "cpu": [ "x64" ], @@ -2266,9 +2268,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", - "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", "cpu": [ "x64" ], @@ -2283,9 +2285,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", - "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", "cpu": [ "arm64" ], @@ -2300,9 +2302,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", - "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", "cpu": [ "ia32" ], @@ -2317,9 +2319,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", - "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", "cpu": [ "x64" ], @@ -2543,6 +2545,25 @@ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "node_modules/@hyrious/esbuild-plugin-commonjs": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@hyrious/esbuild-plugin-commonjs/-/esbuild-plugin-commonjs-0.2.4.tgz", + "integrity": "sha512-NKR8bsDbNP7EpM//cjoo8Bpihmc97gPpnwrggG+18iSGow6oaJpfmy3Bv+oBgPkPlxcGzC9SXh+6szoCoKFvCw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "cjs-module-lexer": "*", + "esbuild": "*" + }, + "peerDependenciesMeta": { + "cjs-module-lexer": { + "optional": true + } + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -2729,6 +2750,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jspm/core": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@jspm/core/-/core-2.0.1.tgz", + "integrity": "sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==", + "dev": true + }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", @@ -4980,6 +5007,13 @@ "typedarray": "^0.0.6" } }, + "node_modules/confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", + "dev": true, + "license": "MIT" + }, "node_modules/consola": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", @@ -5682,9 +5716,9 @@ } }, "node_modules/esbuild": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", - "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5695,30 +5729,48 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.1", - "@esbuild/android-arm": "0.23.1", - "@esbuild/android-arm64": "0.23.1", - "@esbuild/android-x64": "0.23.1", - "@esbuild/darwin-arm64": "0.23.1", - "@esbuild/darwin-x64": "0.23.1", - "@esbuild/freebsd-arm64": "0.23.1", - "@esbuild/freebsd-x64": "0.23.1", - "@esbuild/linux-arm": "0.23.1", - "@esbuild/linux-arm64": "0.23.1", - "@esbuild/linux-ia32": "0.23.1", - "@esbuild/linux-loong64": "0.23.1", - "@esbuild/linux-mips64el": "0.23.1", - "@esbuild/linux-ppc64": "0.23.1", - "@esbuild/linux-riscv64": "0.23.1", - "@esbuild/linux-s390x": "0.23.1", - "@esbuild/linux-x64": "0.23.1", - "@esbuild/netbsd-x64": "0.23.1", - "@esbuild/openbsd-arm64": "0.23.1", - "@esbuild/openbsd-x64": "0.23.1", - "@esbuild/sunos-x64": "0.23.1", - "@esbuild/win32-arm64": "0.23.1", - "@esbuild/win32-ia32": "0.23.1", - "@esbuild/win32-x64": "0.23.1" + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" + } + }, + "node_modules/esbuild-plugins-node-modules-polyfill": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.6.5.tgz", + "integrity": "sha512-gppYvODLbtGhnQV7CPcJ67N/RccaBskIs7zNApUYoj2+rwSFPSlA8Mdxqm5AUDGrPki75dRPNOd2/+HK39YRvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jspm/core": "^2.0.1", + "local-pkg": "^0.5.0", + "resolve.exports": "^2.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.14.0 <=0.23.0" } }, "node_modules/escalade": { @@ -8353,6 +8405,23 @@ "node": ">=6.11.5" } }, + "node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -8742,6 +8811,19 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, + "node_modules/mlly": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" + } + }, "node_modules/mocha": { "version": "10.8.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", @@ -9752,6 +9834,13 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, "node_modules/pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -9872,6 +9961,18 @@ "node": ">=4" } }, + "node_modules/pkg-types": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", + "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.7", + "mlly": "^1.7.1", + "pathe": "^1.1.2" + } + }, "node_modules/postcss-load-config": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", @@ -10338,6 +10439,16 @@ "node": ">=8" } }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -11958,6 +12069,13 @@ "node": ">=14.17" } }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "dev": true, + "license": "MIT" + }, "node_modules/umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", diff --git a/package.json b/package.json index 22d8c708..41b98cf9 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/register": "^7.22.15", + "@hyrious/esbuild-plugin-commonjs": "^0.2.4", "@types/node": "^20.8.9", "@typescript-eslint/eslint-plugin": "^6.9.1", "@typescript-eslint/parser": "^6.9.1", @@ -80,6 +81,7 @@ "common-shakeify": "^1.1.2", "core-js": "^3.33.2", "del": "^7.1.0", + "esbuild-plugins-node-modules-polyfill": "^1.6.5", "eslint": "^8.52.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-import": "^2.29.0", diff --git a/tsup.config.ts b/tsup.config.ts index 58fc85f2..c551f041 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -3,6 +3,7 @@ import type { Options } from "tsup"; import browserList from "browserslist-to-esbuild"; import { nodeModulesPolyfillPlugin } from "esbuild-plugins-node-modules-polyfill"; import { builtinModules } from "module"; +import { commonjs } from "@hyrious/esbuild-plugin-commonjs"; export default defineConfig([ { @@ -26,6 +27,7 @@ export default defineConfig([ nodeModulesPolyfillPlugin({ fallback: "empty", }), + commonjs(), ], }, { @@ -37,12 +39,12 @@ export default defineConfig([ sourcemap: true, outDir: "lib", minify: true, - platform: "node", outExtension({ format }) { return { js: `.min.${format === "cjs" ? "js" : "mjs"}`, }; }, splitting: true, + esbuildPlugins: [commonjs()], }, ]); From ba3c2908f5072700c8d53a18f33aab6ca2c38f07 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Wed, 21 Aug 2024 14:24:47 +0300 Subject: [PATCH 04/45] fix: import from cjs on `require` --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 41b98cf9..c8322813 100644 --- a/package.json +++ b/package.json @@ -30,9 +30,9 @@ }, "exports": { ".": { - "types": "./lib/Typesense.d.mts", + "types": "./lib/Typesense.d.ts", "import": "./lib/Typesense.min.mjs", - "require": "./lib/Typesense.min.mjs" + "require": "./lib/Typesense.min.js" }, "./dist": { "types": "./dist/Typesense.d.ts", From 93942ee5dc8d056945f0886a758f101d593a41b1 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Wed, 21 Aug 2024 14:25:25 +0300 Subject: [PATCH 05/45] build: add esbuild options for bundling UMD dependencies - `loglevel` is written as a UMD module and has to be handled differently from axios --- dist/Typesense.d.mts | 10 +++++----- dist/Typesense.d.ts | 10 +++++----- dist/Typesense.min.js | 4 ++-- dist/Typesense.min.js.map | 2 +- dist/Typesense.min.mjs | 4 ++-- dist/Typesense.min.mjs.map | 2 +- lib/Typesense.d.mts | 10 +++++----- lib/Typesense.d.ts | 10 +++++----- lib/Typesense.min.js | 4 ++-- lib/Typesense.min.js.map | 2 +- lib/Typesense.min.mjs | 4 ++-- lib/Typesense.min.mjs.map | 2 +- tsup.config.ts | 9 ++++++--- 13 files changed, 38 insertions(+), 35 deletions(-) diff --git a/dist/Typesense.d.mts b/dist/Typesense.d.mts index 4654ff7a..de2d2e73 100644 --- a/dist/Typesense.d.mts +++ b/dist/Typesense.d.mts @@ -1,4 +1,4 @@ -import { LogLevelDesc, Logger } from 'loglevel'; +import logger from 'loglevel'; import { Agent } from 'http'; import { Agent as Agent$1 } from 'https'; import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; @@ -44,8 +44,8 @@ interface ConfigurationOptions { useServerSideSearchCache?: boolean; cacheSearchResultsForSeconds?: number; additionalHeaders?: Record; - logLevel?: LogLevelDesc; - logger?: Logger; + logLevel?: logger.LogLevelDesc; + logger?: logger.Logger; /** * Set a custom HTTP Agent * @@ -88,8 +88,8 @@ declare class Configuration { readonly sendApiKeyAsQueryParam?: boolean; readonly cacheSearchResultsForSeconds: number; readonly useServerSideSearchCache: boolean; - readonly logger: Logger; - readonly logLevel: LogLevelDesc; + readonly logger: logger.Logger; + readonly logLevel: logger.LogLevelDesc; readonly additionalHeaders?: Record; readonly httpAgent?: Agent; readonly httpsAgent?: Agent$1; diff --git a/dist/Typesense.d.ts b/dist/Typesense.d.ts index 4654ff7a..de2d2e73 100644 --- a/dist/Typesense.d.ts +++ b/dist/Typesense.d.ts @@ -1,4 +1,4 @@ -import { LogLevelDesc, Logger } from 'loglevel'; +import logger from 'loglevel'; import { Agent } from 'http'; import { Agent as Agent$1 } from 'https'; import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; @@ -44,8 +44,8 @@ interface ConfigurationOptions { useServerSideSearchCache?: boolean; cacheSearchResultsForSeconds?: number; additionalHeaders?: Record; - logLevel?: LogLevelDesc; - logger?: Logger; + logLevel?: logger.LogLevelDesc; + logger?: logger.Logger; /** * Set a custom HTTP Agent * @@ -88,8 +88,8 @@ declare class Configuration { readonly sendApiKeyAsQueryParam?: boolean; readonly cacheSearchResultsForSeconds: number; readonly useServerSideSearchCache: boolean; - readonly logger: Logger; - readonly logLevel: LogLevelDesc; + readonly logger: logger.Logger; + readonly logLevel: logger.LogLevelDesc; readonly additionalHeaders?: Record; readonly httpAgent?: Agent; readonly httpsAgent?: Agent$1; diff --git a/dist/Typesense.min.js b/dist/Typesense.min.js index c629e230..b00e14d2 100644 --- a/dist/Typesense.min.js +++ b/dist/Typesense.min.js @@ -1,9 +1,9 @@ -"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};var _loglevel = require('loglevel'); var be = _interopRequireWildcard(_loglevel);var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||be,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var _http = require('http');var _https = require('https');var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new (0, _http.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new (0, _https.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=_axios2.default.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await _axios2.default.call(void 0, l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,_optionalChain([m, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message])));throw this.customErrorForResponse(m,_optionalChain([m, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]))}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(_optionalChain([l, 'access', _6 => _6.response, 'optionalAccess', _7 => _7.data]))}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel);var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||_loglevel2.default,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var _http = require('http');var _https = require('https');var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new (0, _http.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new (0, _https.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=_axios2.default.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await _axios2.default.call(void 0, l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,_optionalChain([m, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message])));throw this.customErrorForResponse(m,_optionalChain([m, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]))}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(_optionalChain([l, 'access', _6 => _6.response, 'optionalAccess', _7 => _7.data]))}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` `)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object Please try reducing the number of keys in your document, or using CURL to import your data. `):new Error(n)}else r=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se});if(Array.isArray(e)){let n=s.split(` `).map(I=>JSON.parse(I)),o=n.filter(I=>I.success===!1);if(o.length>0)throw new f(`${n.length-o.length} documents imported successfully, ${o.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n);return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se})).split(` -`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};var _crypto = require('crypto');var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(_crypto.createHmac.call(void 0, "sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Di={Client:le,SearchClient:ce,Errors:he};exports.Client = le; exports.Errors = he; exports.SearchClient = ce; exports.default = Di; +`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};var _crypto = require('crypto');var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(_crypto.createHmac.call(void 0, "sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var $i={Client:le,SearchClient:ce,Errors:he};exports.Client = le; exports.Errors = he; exports.SearchClient = ce; exports.default = $i; //# sourceMappingURL=Typesense.min.js.map \ No newline at end of file diff --git a/dist/Typesense.min.js.map b/dist/Typesense.min.js.map index d9cbdbfa..0c31d124 100644 --- a/dist/Typesense.min.js.map +++ b/dist/Typesense.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["/home/fanis/code/typesense/typesense-js/dist/Typesense.min.js","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/MultiSearch.ts"],"names":["Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","importResults","Configuration","options","node","logger","key","array","i","j","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException"],"mappings":"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","file":"/home/fanis/code/typesense/typesense-js/dist/Typesense.min.js","sourcesContent":[null,"import * as logger from \"loglevel\";\nimport { Logger, LogLevelDesc } from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: LogLevelDesc;\n logger?: Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: Logger;\n readonly logLevel: LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["/home/fanis/code/typesense/typesense-js/dist/Typesense.min.js","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/MultiSearch.ts"],"names":["Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","importResults","Configuration","options","node","logger","key","array","i","j","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException"],"mappings":"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","file":"/home/fanis/code/typesense/typesense-js/dist/Typesense.min.js","sourcesContent":[null,"import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n"]} \ No newline at end of file diff --git a/dist/Typesense.min.mjs b/dist/Typesense.min.mjs index 5a14d597..e73d15fa 100644 --- a/dist/Typesense.min.mjs +++ b/dist/Typesense.min.mjs @@ -1,9 +1,9 @@ -var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};import*as be from"loglevel";var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||be,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};import fe from"axios";import{Agent as xe}from"http";import{Agent as Te}from"https";var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new xe({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new Te({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=fe.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await fe(l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,m.data?.message));throw this.customErrorForResponse(m,m.data?.message)}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(l.response?.data)}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` +var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};import be from"loglevel";var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||be,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};import fe from"axios";import{Agent as xe}from"http";import{Agent as Te}from"https";var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new xe({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new Te({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=fe.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await fe(l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,m.data?.message));throw this.customErrorForResponse(m,m.data?.message)}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(l.response?.data)}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` `)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object Please try reducing the number of keys in your document, or using CURL to import your data. `):new Error(n)}else r=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se});if(Array.isArray(e)){let n=s.split(` `).map(I=>JSON.parse(I)),o=n.filter(I=>I.success===!1);if(o.length>0)throw new f(`${n.length-o.length} documents imported successfully, ${o.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n);return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se})).split(` -`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};import{createHmac as He}from"crypto";var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(He("sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Di={Client:le,SearchClient:ce,Errors:he};export{le as Client,he as Errors,ce as SearchClient,Di as default}; +`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};import{createHmac as He}from"crypto";var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(He("sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var $i={Client:le,SearchClient:ce,Errors:he};export{le as Client,he as Errors,ce as SearchClient,$i as default}; //# sourceMappingURL=Typesense.min.mjs.map \ No newline at end of file diff --git a/dist/Typesense.min.mjs.map b/dist/Typesense.min.mjs.map index d12b7406..bbe62e0b 100644 --- a/dist/Typesense.min.mjs.map +++ b/dist/Typesense.min.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Collections.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/Client.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense.ts"],"sourcesContent":["import * as logger from \"loglevel\";\nimport { Logger, LogLevelDesc } from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: LogLevelDesc;\n logger?: Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: Logger;\n readonly logLevel: LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n this.responseCache.delete(oldestEntry);\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n this.responsePromiseCache.delete(oldestEntry);\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n for (const key in searchParameters) {\n if (Array.isArray(searchParameters[key])) {\n additionalQueryParams[key] = searchParameters[key].join(\",\");\n }\n }\n const queryParams = Object.assign(\n {},\n searchParameters,\n additionalQueryParams\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Overrides.RESOURCEPATH}/${this.overrideId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Synonyms.RESOURCEPATH}/${this.synonymId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Documents.RESOURCEPATH}/${this.documentId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${aliasName}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${this.name}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const paramsJSON = JSON.stringify(parameters);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(private id: number, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | string,\n queryParameters: Record = {}\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema\n ): Promise {\n return this.apiCall.put(this.endpointPath(presetId), params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${this.presetId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${this.stopwordId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${this.id}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import Client from \"./Typesense/Client\";\nimport SearchClient from \"./Typesense/SearchClient\";\nimport * as Errors from \"./Typesense/Errors\";\n\nexport { Client, SearchClient, Errors };\nexport default { Client, SearchClient, Errors };\n"],"mappings":"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","names":["logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","axios","HTTPAgent","HTTPSAgent","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","source","axios","response","error","candidateNode","i","isDueForHealthcheck","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RESOURCEPATH","Collections","apiCall","schema","options","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","key","queryParams","operation","Collections","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","createHmac","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","Typesense_default","Client","SearchClient","Errors_exports"]} \ No newline at end of file +{"version":3,"sources":["../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Collections.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/Client.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense.ts"],"sourcesContent":["import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n this.responseCache.delete(oldestEntry);\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n this.responsePromiseCache.delete(oldestEntry);\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n for (const key in searchParameters) {\n if (Array.isArray(searchParameters[key])) {\n additionalQueryParams[key] = searchParameters[key].join(\",\");\n }\n }\n const queryParams = Object.assign(\n {},\n searchParameters,\n additionalQueryParams\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Overrides.RESOURCEPATH}/${this.overrideId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Synonyms.RESOURCEPATH}/${this.synonymId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Documents.RESOURCEPATH}/${this.documentId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${aliasName}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${this.name}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const paramsJSON = JSON.stringify(parameters);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(private id: number, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | string,\n queryParameters: Record = {}\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema\n ): Promise {\n return this.apiCall.put(this.endpointPath(presetId), params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${this.presetId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${this.stopwordId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${this.id}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import Client from \"./Typesense/Client\";\nimport SearchClient from \"./Typesense/SearchClient\";\nimport * as Errors from \"./Typesense/Errors\";\n\nexport { Client, SearchClient, Errors };\nexport default { Client, SearchClient, Errors };\n"],"mappings":"6FAAA,OAAOA,OAAY,WCAnB,IAAAC,GAAA,GAAAC,GAAAD,GAAA,eAAAE,EAAA,gBAAAC,EAAA,8BAAAC,EAAA,wBAAAC,EAAA,mBAAAC,EAAA,wBAAAC,EAAA,qBAAAC,EAAA,wBAAAC,EAAA,gBAAAC,EAAA,mBAAAC,ICAA,IAAqBC,EAArB,cAA4C,KAAM,CAIhD,YAAYC,EAAkB,CAC5B,MAAMA,CAAO,EACb,KAAK,KAAO,WAAW,KACvB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,ECPA,IAAqBC,EAArB,cAAuCC,CAAe,CAAC,ECAvD,IAAqBC,EAArB,cAAuDC,CAAe,CAAC,ECAvE,IAAqBC,EAArB,cAAiDC,CAAe,CAAC,ECAjE,IAAqBC,EAArB,cAA4CC,CAAe,CAAC,ECA5D,IAAqBC,EAArB,cAAiDC,CAAe,CAAC,ECAjE,IAAqBC,EAArB,cAA8CC,CAAe,CAAC,ECA9D,IAAqBC,EAArB,cAAiDC,CAAe,CAAC,ECAjE,IAAqBC,EAArB,cAAyCC,CAAe,CAAC,ECCzD,IAAqBC,EAArB,cAAyCC,CAAe,CAEtD,YAAYC,EAAiBC,EAAiC,CAC5D,MAAMD,CAAO,EACb,KAAK,cAAgBC,CACvB,CACF,EXyFA,IAAqBC,EAArB,KAAmC,CAwBjC,YAAYC,EAA+B,CACzC,KAAK,MAAQA,EAAQ,OAAS,CAAC,EAC/B,KAAK,MAAQ,KAAK,MACf,IAAKC,GAAS,KAAK,qBAAqBA,CAAI,CAAC,EAC7C,IAAKA,GAAS,KAAK,qBAAqBA,CAAI,CAAC,EAC7C,IAAKA,IAAU,CAAE,GAAGA,CAAK,EAAE,EAE1BD,EAAQ,gBAAkB,OAC5BA,EAAQ,eAAiB,IAGvBA,EAAQ,iBAAmB,IAC7B,KAAK,aAAa,KAAK,KAAK,EAG9B,KAAK,YAAcA,EAAQ,YAC3B,KAAK,YAAc,KAAK,qBAAqB,KAAK,WAAW,EAC7D,KAAK,YAAc,KAAK,qBAAqB,KAAK,WAAW,EAE7D,KAAK,yBACHA,EAAQ,0BAA4BA,EAAQ,gBAAkB,EAChE,KAAK,2BAA6BA,EAAQ,4BAA8B,GACxE,KAAK,WACHA,EAAQ,YACR,KAAK,MAAM,QAAU,KAAK,aAAe,KAAO,EAAI,IACpD,EACF,KAAK,qBAAuBA,EAAQ,sBAAwB,GAE5D,KAAK,OAASA,EAAQ,OACtB,KAAK,uBAAyBA,EAAQ,uBAEtC,KAAK,6BACHA,EAAQ,8BAAgC,EAC1C,KAAK,yBAA2BA,EAAQ,0BAA4B,GAEpE,KAAK,OAASA,EAAQ,QAAUE,GAChC,KAAK,SAAWF,EAAQ,UAAY,OACpC,KAAK,OAAO,SAAS,KAAK,QAAQ,EAElC,KAAK,kBAAoBA,EAAQ,kBAEjC,KAAK,UAAYA,EAAQ,UACzB,KAAK,WAAaA,EAAQ,WAE1B,KAAK,iBAAmBA,EAAQ,iBAEhC,KAAK,wBAAwBA,CAAO,EACpC,KAAK,SAAS,CAChB,CAEA,UAAoB,CAClB,GAAI,KAAK,OAAS,MAAQ,KAAK,MAAM,SAAW,GAAK,KAAK,cAAc,EACtE,MAAM,IAAIG,EACR,qEACF,EAGF,GACE,KAAK,aAAe,MACpB,KAAK,2BAA2B,KAAK,WAAW,EAEhD,MAAM,IAAIA,EACR,oFACF,EAGF,GAAI,KAAK,QAAU,KACjB,MAAM,IAAIA,EAA0B,2BAA2B,EAGjE,MAAO,EACT,CAEQ,eAAyB,CAC/B,OAAO,KAAK,MAAM,KAAMF,GACf,KAAK,2BAA2BA,CAAI,CAC5C,CACH,CAEQ,2BACNA,EAIS,CACT,MACE,CAAC,CAAC,WAAY,OAAQ,OAAQ,MAAM,EAAE,MAAOG,GACpCH,EAAK,eAAeG,CAAG,CAC/B,GAAKH,EAAK,KAAU,IAEzB,CAEQ,qBACNA,EASY,CACZ,OAAIA,GAAQ,MAAQ,CAACA,EAAK,eAAe,MAAM,IAC7CA,EAAK,KAAU,IAEVA,CACT,CAEQ,qBACNA,EASY,CACZ,GACEA,GAAQ,MACR,CAACA,EAAK,eAAe,MAAM,GAC3BA,EAAK,eAAe,UAAU,EAE9B,OAAQA,EAAK,SAAa,CACxB,IAAK,QACHA,EAAK,KAAU,IACf,MACF,IAAK,OACHA,EAAK,KAAU,GACf,KACJ,CAEF,OAAOA,CACT,CAEQ,wBAAwBD,EAAqC,CAC/DA,EAAQ,gBACV,KAAK,OAAO,KACV,gFACF,EAEEA,EAAQ,YACV,KAAK,OAAO,KACV,oGACF,EAEEA,EAAQ,kBACV,KAAK,OAAO,KACV,0GACF,CAEJ,CAEQ,aAAaK,EAAO,CAC1B,QAASC,EAAID,EAAM,OAAS,EAAGC,EAAI,EAAGA,IAAK,CACzC,IAAMC,EAAI,KAAK,MAAM,KAAK,OAAO,GAAKD,EAAI,EAAE,EAC5C,CAACD,EAAMC,CAAC,EAAGD,EAAME,CAAC,CAAC,EAAI,CAACF,EAAME,CAAC,EAAGF,EAAMC,CAAC,CAAC,CAC5C,CACF,CACF,EY3RA,OAAOE,OAA0D,QAajE,OAAS,SAASC,OAAiB,OACnC,OAAS,SAASC,OAAkB,QAEpC,IAAMC,GAAmB,sBACnBC,GAAU,GACVC,GAAY,GAOZC,GACJ,OAAO,QAAY,KACnB,QAAQ,UAAY,MACpB,QAAQ,SAAS,MAAQ,KAENC,EAArB,KAA6B,CAc3B,YAAoBC,EAA8B,CAA9B,mBAAAA,EAClB,KAAK,OAAS,KAAK,cAAc,OACjC,KAAK,MACH,KAAK,cAAc,OAAS,KACxB,KAAK,cAAc,MACnB,KAAK,MAAM,KAAK,UAAU,KAAK,cAAc,KAAK,CAAC,EACzD,KAAK,YACH,KAAK,cAAc,aAAe,KAC9B,KAAK,cAAc,YACnB,KAAK,MAAM,KAAK,UAAU,KAAK,cAAc,WAAW,CAAC,EAC/D,KAAK,yBAA2B,KAAK,cAAc,yBACnD,KAAK,2BACH,KAAK,cAAc,2BACrB,KAAK,qBAAuB,KAAK,cAAc,WAC/C,KAAK,qBAAuB,KAAK,cAAc,qBAC/C,KAAK,uBAAyB,KAAK,cAAc,uBACjD,KAAK,sBAAwB,KAAK,cAAc,kBAEhD,KAAK,OAAS,KAAK,cAAc,OAEjC,KAAK,2BAA2B,EAChC,KAAK,iBAAmB,EAC1B,CAEA,MAAM,IACJC,EACAC,EAAuB,CAAC,EACxB,CACE,YAAAC,EAAc,KACd,aAAAC,EAAe,MACjB,EAGI,CAAC,EACO,CACZ,OAAO,KAAK,eAAkB,MAAOH,EAAU,CAC7C,gBAAAC,EACA,YAAAC,EACA,aAAAC,CACF,CAAC,CACH,CAEA,MAAM,OAAUH,EAAkBC,EAAuB,CAAC,EAAe,CACvE,OAAO,KAAK,eAAkB,SAAUD,EAAU,CAAE,gBAAAC,CAAgB,CAAC,CACvE,CAEA,MAAM,KACJD,EACAI,EAAsB,CAAC,EACvBH,EAAuB,CAAC,EACxBI,EAAyB,CAAC,EACd,CACZ,OAAO,KAAK,eAAkB,OAAQL,EAAU,CAC9C,gBAAAC,EACA,eAAAG,EACA,kBAAAC,CACF,CAAC,CACH,CAEA,MAAM,IACJL,EACAI,EAAsB,CAAC,EACvBH,EAAuB,CAAC,EACZ,CACZ,OAAO,KAAK,eAAkB,MAAOD,EAAU,CAC7C,gBAAAC,EACA,eAAAG,CACF,CAAC,CACH,CAEA,MAAM,MACJJ,EACAI,EAAsB,CAAC,EACvBH,EAAuB,CAAC,EACZ,CACZ,OAAO,KAAK,eAAkB,QAASD,EAAU,CAC/C,gBAAAC,EACA,eAAAG,CACF,CAAC,CACH,CAEA,MAAM,eACJE,EACAN,EACA,CACE,gBAAAC,EAAkB,KAClB,eAAAG,EAAiB,KACjB,kBAAAC,EAAoB,CAAC,EACrB,YAAAH,EAAc,KACd,aAAAC,EAAe,OACf,sBAAAI,EAAwB,GACxB,gBAAAC,EAAkB,MACpB,EASY,CACZ,KAAK,cAAc,SAAS,EAE5B,IAAMC,EAAgB,KAAK,IAAI,EAC3BC,EACJ,KAAK,OAAO,MACV,YAAYD,CAAa,gBAAgBH,EAAY,YAAY,CAAC,aAAaN,CAAQ,EACzF,EACA,QACMW,EAAW,EACfA,GAAY,KAAK,qBAAuB,EACxCA,IACA,CACA,IAAMC,EAAO,KAAK,YAAYH,CAAa,EAO3C,GANA,KAAK,OAAO,MACV,YAAYA,CAAa,gBAAgBH,EAAY,YAAY,CAAC,iBAAiBK,CAAQ,YACzFC,EAAK,KACP,EACF,EAEIV,GAAeA,EAAY,QAC7B,OAAO,QAAQ,OAAO,IAAI,MAAM,4BAA4B,CAAC,EAG/D,IAAIW,EAEJ,GAAI,CACF,IAAMC,EAAqC,CACzC,OAAQR,EACR,IAAK,KAAK,OAAON,EAAUY,CAAI,EAC/B,QAAS,OAAO,OACd,CAAC,EACD,KAAK,eAAe,EACpBP,EACA,KAAK,qBACP,EACA,iBAAkB,IAClB,cAAe,IACf,aAAAF,EACA,eAAiBY,GAKRA,EAAS,EAElB,kBAAmB,CACjB,CAACC,EAAMC,IAAY,CACjB,IAAIC,GAAkBF,EACtB,OACEC,IAAY,QACZ,OAAOD,GAAS,UAChBC,EAAQ,cAAc,GACtBA,EAAQ,cAAc,EAAE,WAAW,kBAAkB,IAErDC,GAAkB,KAAK,MAAMF,CAAI,GAE5BE,EACT,CACF,CACF,EAiEA,GA/DIX,IAA0B,KAC5BO,EAAe,QAAU,KAAK,yBAA2B,KAGvDb,GAAmB,OAAO,KAAKA,CAAe,EAAE,SAAW,IAC7Da,EAAe,OAASb,GAGtB,KAAK,yBACPa,EAAe,OAASA,EAAe,QAAU,CAAC,EAClDA,EAAe,OAAO,qBAAqB,EAAI,KAAK,QAGlD,KAAK,cAAc,WACrB,KAAK,OAAO,MACV,YAAYL,CAAa,0BAC3B,EACAK,EAAe,UAAY,KAAK,cAAc,WACrCN,IAAoB,KACxBX,IAKH,KAAK,OAAO,MAAM,YAAYY,CAAa,sBAAsB,EACjEK,EAAe,UAAY,IAAItB,GAAU,CAAE,UAAW,EAAK,CAAC,GAL5D,KAAK,OAAO,KACV,YAAYiB,CAAa,4EAC3B,GAOA,KAAK,cAAc,YACrB,KAAK,OAAO,MACV,YAAYA,CAAa,2BAC3B,EACAK,EAAe,WAAa,KAAK,cAAc,YACtCN,IAAoB,KACxBX,IAKH,KAAK,OAAO,MAAM,YAAYY,CAAa,sBAAsB,EACjEK,EAAe,WAAa,IAAIrB,GAAW,CAAE,UAAW,EAAK,CAAC,GAL9D,KAAK,OAAO,KACV,YAAYgB,CAAa,4EAC3B,GAOA,KAAK,cAAc,mBACrB,KAAK,OAAO,MACV,YAAYA,CAAa,iCAC3B,EACAK,EAAe,iBAAmB,KAAK,cAAc,kBAIrDV,IACE,OAAOA,GAAmB,UAC1BA,EAAe,SAAW,GACzB,OAAOA,GAAmB,UACzB,OAAO,KAAKA,CAAc,EAAE,SAAW,KAE3CU,EAAe,KAAOV,GAIpBF,EAAa,CAEf,IAAMiB,EADcC,GAAM,YACC,OAAO,EAClCP,EAAgB,IAAMM,EAAO,OAAO,EACpCjB,EAAY,iBAAiB,QAASW,CAAa,EACnDC,EAAe,YAAcK,EAAO,KACtC,CAEA,IAAME,EAAW,MAAMD,GAAMN,CAAc,EAU3C,GATIO,EAAS,QAAU,GAAKA,EAAS,QAAU,KAG7C,KAAK,mBAAmBT,EAAMjB,EAAO,EAEvC,KAAK,OAAO,MACV,YAAYc,CAAa,qBAAqBG,EAAK,KAAK,gCAAgCS,EAAS,MAAM,GACzG,EAEIA,EAAS,QAAU,KAAOA,EAAS,OAAS,IAE9C,OAAO,QAAQ,QAAQA,EAAS,IAAI,EAC/B,GAAIA,EAAS,OAAS,IAE3B,OAAO,QAAQ,OACb,KAAK,uBAAuBA,EAAUA,EAAS,MAAM,OAAO,CAC9D,EAIA,MAAM,KAAK,uBAAuBA,EAAUA,EAAS,MAAM,OAAO,CAEtE,OAASC,EAAY,CAEnB,KAAK,mBAAmBV,EAAMhB,EAAS,EACvCc,EAAgBY,EAChB,KAAK,OAAO,KACV,YAAYb,CAAa,qBACvBG,EAAK,KACP,mBAAmBU,EAAM,IAAI,IAAIA,EAAM,OAAO,GAC5CA,EAAM,UAAY,KACd,GACA,MAAQ,KAAK,UAAUA,EAAM,UAAU,IAAI,CACjD,GACF,EAEA,KAAK,OAAO,KACV,YAAYb,CAAa,kBAAkB,KAAK,oBAAoB,gCACtE,EACA,MAAM,KAAK,MAAM,KAAK,oBAAoB,CAC5C,QAAE,CACIP,GAAeW,GACjBX,EAAY,oBAAoB,QAASW,CAAa,CAE1D,CACF,CACA,YAAK,OAAO,MACV,YAAYJ,CAAa,uCAC3B,EACO,QAAQ,OAAOC,CAAa,CACrC,CAKA,YAAYD,EAAgB,EAAS,CAEnC,GAAI,KAAK,aAAe,KAAM,CAM5B,GALA,KAAK,OAAO,MACV,YAAYA,CAAa,wBACvB,KAAK,YAAY,KACnB,OAAO,KAAK,YAAY,YAAc,GAAO,UAAY,WAAW,EACtE,EAEE,KAAK,YAAY,YAAc,IAC/B,KAAK,sBAAsB,KAAK,YAAaA,CAAa,EAE1D,YAAK,OAAO,MACV,YAAYA,CAAa,kCAAkC,KAAK,YAAY,KAAK,EACnF,EACO,KAAK,YAEd,KAAK,OAAO,MACV,YAAYA,CAAa,oCAC3B,CACF,CAGA,KAAK,OAAO,MACV,YAAYA,CAAa,mBAAmB,KAAK,MAC9C,IACEG,GACC,QAAQA,EAAK,KAAK,OAChBA,EAAK,YAAc,GAAO,UAAY,WACxC,EACJ,EACC,KAAK,MAAM,CAAC,EACjB,EACA,IAAIW,EAAsB,KAAK,MAAM,CAAC,EACtC,QAASC,EAAI,EAAGA,GAAK,KAAK,MAAM,OAAQA,IAGtC,GAFA,KAAK,kBAAoB,KAAK,iBAAmB,GAAK,KAAK,MAAM,OACjED,EAAgB,KAAK,MAAM,KAAK,gBAAgB,EAE9CA,EAAc,YAAc,IAC5B,KAAK,sBAAsBA,EAAed,CAAa,EAEvD,YAAK,OAAO,MACV,YAAYA,CAAa,kCAAkCc,EAAc,KAAK,EAChF,EACOA,EAMX,YAAK,OAAO,MACV,YAAYd,CAAa,gEAAgEc,EAAc,KAAK,EAC9G,EACOA,CACT,CAEA,sBAAsBX,EAAMH,EAAgB,EAAY,CACtD,IAAMgB,EACJ,KAAK,IAAI,EAAIb,EAAK,oBAClB,KAAK,2BAA6B,IACpC,OAAIa,GACF,KAAK,OAAO,MACV,YAAYhB,CAAa,UAAUG,EAAK,KAAK,8CAA8C,KAAK,0BAA0B,iCAC5H,EAEKa,CACT,CAEA,4BAAmC,CAC7B,KAAK,aAAe,OACtB,KAAK,YAAY,MAAQ,cACzB,KAAK,mBAAmB,KAAK,YAAa9B,EAAO,GAGnD,KAAK,MAAM,QAAQ,CAACiB,EAAMY,IAAM,CAC9BZ,EAAK,MAAQY,EACb,KAAK,mBAAmBZ,EAAMjB,EAAO,CACvC,CAAC,CACH,CAEA,mBAAmBiB,EAAMc,EAAiB,CACxCd,EAAK,UAAYc,EACjBd,EAAK,oBAAsB,KAAK,IAAI,CACtC,CAEA,OAAOZ,EAAkBY,EAAc,CACrC,OAAIA,EAAK,KAAO,KACP,GAAGA,EAAK,GAAG,GAAGZ,CAAQ,GAExB,GAAGY,EAAK,QAAQ,MAAMA,EAAK,IAAI,IAAIA,EAAK,IAAI,GAAGA,EAAK,IAAI,GAAGZ,CAAQ,EAC5E,CAEA,gBAAsB,CACpB,IAAM2B,EAAiB,CAAC,EACxB,OAAK,KAAK,yBACRA,EAAejC,EAAgB,EAAI,KAAK,QAE1CiC,EAAe,cAAc,EAAI,mBAC1BA,CACT,CAEA,MAAM,MAAMC,EAAwB,CAClC,OAAO,IAAI,QAASC,GAAY,WAAWA,EAASD,EAAU,GAAI,CAAC,CACrE,CAEA,uBACEP,EACAS,EACgB,CAChB,IAAIC,EAAe,iCAAiCV,EAAS,MAAM,GAEjE,OAAOS,GAAsB,UAC7BA,EAAkB,KAAK,IAAM,KAE7BC,GAAgB,mBAAmBD,CAAiB,IAGtD,IAAIR,EAAQ,IAAIU,EAAeD,CAAY,EAE3C,OAAIV,EAAS,SAAW,IACtBC,EAAQ,IAAIW,EAAiBF,CAAY,EAChCV,EAAS,SAAW,IAC7BC,EAAQ,IAAIY,EAAoBH,CAAY,EACnCV,EAAS,SAAW,IAC7BC,EAAQ,IAAIa,EAAeJ,CAAY,EAC9BV,EAAS,SAAW,IAC7BC,EAAQ,IAAIc,EAAoBL,CAAY,EACnCV,EAAS,SAAW,IAC7BC,EAAQ,IAAIe,EAAoBN,CAAY,EACnCV,EAAS,QAAU,KAAOA,EAAS,QAAU,IACtDC,EAAQ,IAAIgB,EAAYP,CAAY,EAEpCT,EAAQ,IAAIiB,EAAUR,CAAY,EAGpCT,EAAM,WAAaD,EAAS,OAErBC,CACT,CACF,ECjcA,IAAMkB,GAAe,eAEAC,EAArB,KAAiC,CAC/B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,OACJC,EACAC,EAAmC,CAAC,EACT,CAC3B,OAAO,KAAK,QAAQ,KAAuBJ,GAAcG,EAAQC,CAAO,CAC1E,CAEA,MAAM,SACJA,EAAsC,CAAC,EACV,CAC7B,OAAO,KAAK,QAAQ,IAAwBJ,GAAcI,CAAO,CACnE,CAEA,WAAW,cAAe,CACxB,OAAOJ,EACT,CACF,EC1CA,IAAqBK,EAArB,KAAsC,CAAtC,cACE,KAAQ,cAAkC,IAAI,IAC9C,KAAQ,qBAAyC,IAAI,IAErD,YAAa,CACX,KAAK,cAAgB,IAAI,IACzB,KAAK,qBAAuB,IAAI,GAClC,CAGA,MAAM,QACJC,EACAC,EACAC,EACAC,EACsB,CACtB,GAAM,CACJ,wBAAAC,EAA0B,IAC1B,QAAAC,EAAU,GACZ,EAAIF,EAGJ,GAFwBC,GAA2B,GAAKC,GAAW,EAGjE,OAAOJ,EAAgB,KAAKD,EAAgB,GAAGE,CAAwB,EAGzE,IAAMI,EAA+B,KAAK,UACxCJ,CACF,EACMK,EAAa,KAAK,cAAc,IAAID,CAA4B,EAChEE,EAAM,KAAK,IAAI,EAErB,GAAID,EAAY,CAGd,GADEC,EAAMD,EAAW,iBAAmBH,EAA0B,IAE9D,YAAK,cAAc,OAAOE,CAA4B,EACtD,KAAK,cAAc,IAAIA,EAA8BC,CAAU,EACxD,QAAQ,QAAQA,EAAW,QAAQ,EAE1C,KAAK,cAAc,OAAOD,CAA4B,CAE1D,CAEA,IAAMG,EAAoB,KAAK,qBAAqB,IAClDH,CACF,EAEA,GAAIG,EAAmB,CAIrB,GAFED,EAAMC,EAAkB,iBACxBL,EAA0B,IAE1B,YAAK,qBAAqB,OAAOE,CAA4B,EAC7D,KAAK,qBAAqB,IACxBA,EACAG,CACF,EACOA,EAAkB,gBAEzB,KAAK,qBAAqB,OAAOH,CAA4B,CAEjE,CAEA,IAAMI,EAAkBT,EAAgB,KACtCD,EACA,GAAGE,CACL,EACA,KAAK,qBAAqB,IAAII,EAA8B,CAC1D,iBAAkBE,EAClB,gBAAAE,CACF,CAAC,EAED,IAAMC,EAAW,MAAMD,EAOvB,GANA,KAAK,cAAc,IAAIJ,EAA8B,CACnD,iBAAkBE,EAClB,SAAAG,CACF,CAAC,EAE0B,KAAK,cAAc,KAAON,EAC7B,CACtB,IAAMO,EAAc,KAAK,cAAc,KAAK,EAAE,KAAK,EAAE,MACrD,KAAK,cAAc,OAAOA,CAAW,CACvC,CAGA,GADE,KAAK,qBAAqB,KAAOP,EACI,CACrC,IAAMO,EAAc,KAAK,qBAAqB,KAAK,EAAE,KAAK,EAAE,MAC5D,KAAK,qBAAqB,OAAOA,CAAW,CAC9C,CACA,OAAOD,CACT,CACF,EClFA,IAAME,GAAe,aAERC,EAAN,KAEP,CAGE,YACYC,EACAC,EACAC,EACV,CAHU,oBAAAF,EACA,aAAAC,EACA,mBAAAC,EALZ,KAAU,iBAAqC,IAAIC,CAMhD,CAEH,YAAa,CACX,KAAK,iBAAiB,WAAW,CACnC,CAEA,MAAM,OACJC,EACA,CACE,6BAAAC,EAA+B,KAAK,cACjC,6BACH,YAAAC,EAAc,IAChB,EAAmB,CAAC,EACQ,CAC5B,IAAMC,EAAwB,CAAC,EAC3B,KAAK,cAAc,2BAA6B,KAClDA,EAAsB,UAAe,IAEvC,QAAWC,KAAOJ,EACZ,MAAM,QAAQA,EAAiBI,CAAG,CAAC,IACrCD,EAAsBC,CAAG,EAAIJ,EAAiBI,CAAG,EAAE,KAAK,GAAG,GAG/D,IAAMC,EAAc,OAAO,OACzB,CAAC,EACDL,EACAG,CACF,EAEA,OAAO,KAAK,iBAAiB,QAC3B,KAAK,QACL,KAAK,QAAQ,IACb,CAAC,KAAK,aAAa,QAAQ,EAAGE,EAAa,CAAE,YAAAH,CAAY,CAAC,EAC1D,CACE,wBAAyBD,CAC3B,CACF,CACF,CAEU,aAAaK,EAAoB,CACzC,MAAO,GAAGC,EAAY,YAAY,IAAI,KAAK,cAAc,GAAGb,EAAY,GACtEY,IAAc,OAAY,GAAK,IAAMA,CACvC,EACF,CAEA,WAAW,cAAe,CACxB,OAAOZ,EACT,CACF,EC2KA,IAAMc,GACJ,OAAO,QAAY,KACnB,QAAQ,UAAY,MACpB,QAAQ,SAAS,MAAQ,KAENC,EAArB,cACUC,CAEV,CACE,YACEC,EACAC,EACAC,EACA,CACA,MAAMF,EAAgBC,EAASC,CAAa,CAC9C,CAEA,MAAM,OAAOC,EAAaC,EAAmC,CAAC,EAAe,CAC3E,GAAI,CAACD,EAAU,MAAM,IAAI,MAAM,sBAAsB,EACrD,OAAO,KAAK,QAAQ,KAAQ,KAAK,aAAa,EAAGA,EAAUC,CAAO,CACpE,CAEA,MAAM,OAAOD,EAAaC,EAAmC,CAAC,EAAe,CAC3E,GAAI,CAACD,EAAU,MAAM,IAAI,MAAM,sBAAsB,EACrD,OAAO,KAAK,QAAQ,KAClB,KAAK,aAAa,EAClBA,EACA,OAAO,OAAO,CAAC,EAAGC,EAAS,CAAE,OAAQ,QAAS,CAAC,CACjD,CACF,CAOA,MAAM,OACJD,EACAC,EAA8D,CAAC,EAC1B,CACrC,GAAI,CAACD,EAAU,MAAM,IAAI,MAAM,sBAAsB,EAErD,OAAIC,EAAQ,WAAgB,KACnB,KAAK,QAAQ,MAClB,KAAK,aAAa,EAClBD,EACA,OAAO,OAAO,CAAC,EAAGC,CAAO,CAC3B,EAEO,KAAK,QAAQ,KAClB,KAAK,aAAa,EAClBD,EACA,OAAO,OAAO,CAAC,EAAGC,EAAS,CAAE,OAAQ,QAAS,CAAC,CACjD,CAEJ,CAEA,MAAM,OACJC,EAAqB,CAAC,EACG,CACzB,OAAO,KAAK,QAAQ,OAAuB,KAAK,aAAa,EAAGA,CAAK,CACvE,CAEA,MAAM,WAAWC,EAAgBF,EAAoC,CAAC,EAAG,CACvE,YAAK,cAAc,OAAO,KACxB,iKACF,EACO,KAAK,OAAOE,EAAWF,CAAO,CACvC,CAgBA,MAAM,OACJE,EACAF,EAAoC,CAAC,EACD,CACpC,IAAIG,EACJ,GAAI,MAAM,QAAQD,CAAS,EACzB,GAAI,CACFC,EAAyBD,EACtB,IAAKH,GAAa,KAAK,UAAUA,CAAQ,CAAC,EAC1C,KAAK;AAAA,CAAI,CACd,OAASK,EAAY,CAEnB,MACEA,aAAiB,YACjBA,EAAM,QAAQ,SAAS,kCAAkC,EAEnD,IAAI,MAAM,GAAGA,CAAK;AAAA;AAAA;AAAA;AAAA,WAIvB,EAIG,IAAI,MAAMA,CAAK,CACvB,MAEAD,EAAyBD,EAG3B,IAAMG,EAAuB,MAAM,KAAK,QAAQ,eAC9C,OACA,KAAK,aAAa,QAAQ,EAC1B,CACE,gBAAiBL,EACjB,eAAgBG,EAChB,kBAAmB,CAAE,eAAgB,YAAa,EAClD,sBAAuB,GACvB,gBAAiB,EAAAV,EACnB,CACF,EAEA,GAAI,MAAM,QAAQS,CAAS,EAAG,CAC5B,IAAMI,EAAsBD,EACzB,MAAM;AAAA,CAAI,EACV,IAAKE,GAAM,KAAK,MAAMA,CAAC,CAAC,EACrBC,EAAcF,EAAoB,OACrCC,GAAMA,EAAE,UAAY,EACvB,EACA,GAAIC,EAAY,OAAS,EACvB,MAAM,IAAIC,EACR,GACEH,EAAoB,OAASE,EAAY,MAC3C,qCACEA,EAAY,MACd,2IACAF,CACF,EAEA,OAAOA,CAEX,KACE,QAAOD,CAEX,CAIA,MAAM,aACJK,EACAV,EAAoC,CAAC,EACV,CAa3B,IAAMM,GAZuB,MAAM,KAAK,QAAQ,eAC9C,OACA,KAAK,aAAa,QAAQ,EAC1B,CACE,gBAAiBN,EACjB,eAAgBU,EAChB,kBAAmB,CAAE,eAAgB,YAAa,EAClD,sBAAuB,GACvB,gBAAiB,EAAAjB,EACnB,CACF,GAGG,MAAM;AAAA,CAAI,EACV,IAAKc,GAAM,KAAK,MAAMA,CAAC,CAAC,EACrBC,EAAcF,EAAoB,OAAQC,GAAMA,EAAE,UAAY,EAAK,EACzE,GAAIC,EAAY,OAAS,EACvB,MAAM,IAAIC,EACR,GACEH,EAAoB,OAASE,EAAY,MAC3C,qCACEA,EAAY,MACd,2IACAF,CACF,EAEA,OAAOA,CAEX,CAKA,MAAM,OAAON,EAAqC,CAAC,EAAoB,CACrE,OAAO,KAAK,QAAQ,IAAY,KAAK,aAAa,QAAQ,EAAGA,CAAO,CACtE,CAKA,MAAM,aACJA,EAAqC,CAAC,EACjB,CACrB,OAAO,KAAK,QAAQ,IAAgB,KAAK,aAAa,QAAQ,EAAGA,EAAS,CACxE,aAAc,QAChB,CAAC,CACH,CACF,EC1bA,IAAMW,GAAe,aAuCAC,EAArB,MAAqBC,CAAU,CAC7B,YACUC,EACAC,EACR,CAFQ,oBAAAD,EACA,aAAAC,CACP,CAEH,MAAM,OACJC,EACAC,EACyB,CACzB,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAU,EAC5BC,CACF,CACF,CAEA,MAAM,UAA6C,CACjD,OAAO,KAAK,QAAQ,IAA6B,KAAK,aAAa,CAAC,CACtE,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGC,EAAY,YAAY,IAAI,KAAK,cAAc,GACvDN,EAAU,YACZ,GAAGK,IAAc,OAAY,GAAK,IAAMA,CAAS,EACnD,CAEA,WAAW,cAAuB,CAChC,OAAOP,EACT,CACF,EC5DA,IAAqBS,EAArB,KAA8B,CAC5B,YACUC,EACAC,EACAC,EACR,CAHQ,oBAAAF,EACA,gBAAAC,EACA,aAAAC,CACP,CAEH,MAAM,UAAoC,CACxC,OAAO,KAAK,QAAQ,IAAoB,KAAK,aAAa,CAAC,CAC7D,CAEA,MAAM,QAAwC,CAC5C,OAAO,KAAK,QAAQ,OAA6B,KAAK,aAAa,CAAC,CACtE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAY,YAAY,IAAI,KAAK,cAAc,GAAGC,EAAU,YAAY,IAAI,KAAK,UAAU,EACvG,CACF,EC1BA,IAAMC,GAAe,YAaAC,EAArB,MAAqBC,CAAS,CAC5B,YAAoBC,EAAgCC,EAAkB,CAAlD,oBAAAD,EAAgC,aAAAC,CAAmB,CAEvE,MAAM,OACJC,EACAC,EACwB,CACxB,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAS,EAC3BC,CACF,CACF,CAEA,MAAM,UAA4C,CAChD,OAAO,KAAK,QAAQ,IAA4B,KAAK,aAAa,CAAC,CACrE,CAEQ,aAAaC,EAAoB,CACvC,MAAO,GAAGC,EAAY,YAAY,IAAI,KAAK,cAAc,GACvDN,EAAS,YACX,GAAGK,IAAc,OAAY,GAAK,IAAMA,CAAS,EACnD,CAEA,WAAW,cAAuB,CAChC,OAAOP,EACT,CACF,EC/BA,IAAqBS,EAArB,KAA6B,CAC3B,YACUC,EACAC,EACAC,EACR,CAHQ,oBAAAF,EACA,eAAAC,EACA,aAAAC,CACP,CAEH,MAAM,UAAmC,CACvC,OAAO,KAAK,QAAQ,IAAmB,KAAK,aAAa,CAAC,CAC5D,CAEA,MAAM,QAAuC,CAC3C,OAAO,KAAK,QAAQ,OAA4B,KAAK,aAAa,CAAC,CACrE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAY,YAAY,IAAI,KAAK,cAAc,GAAGC,EAAS,YAAY,IAAI,KAAK,SAAS,EACrG,CACF,ECtBO,IAAMC,GAAN,KAAkD,CACvD,YACUC,EACAC,EACAC,EACR,CAHQ,oBAAAF,EACA,gBAAAC,EACA,aAAAC,CACP,CAEH,MAAM,UAAuB,CAC3B,OAAO,KAAK,QAAQ,IAAO,KAAK,aAAa,CAAC,CAChD,CAEA,MAAM,OAAOC,EAAmC,CAC9C,OAAO,KAAK,QAAQ,OAAU,KAAK,aAAa,EAAGA,CAAO,CAC5D,CAEA,MAAM,OACJC,EACAD,EAAmC,CAAC,EACxB,CACZ,OAAO,KAAK,QAAQ,MAAS,KAAK,aAAa,EAAGC,EAAiBD,CAAO,CAC5E,CAEQ,cAAuB,CAC7B,MAAO,GAAGE,EAAY,YAAY,IAAI,KAAK,cAAc,GAAGC,EAAU,YAAY,IAAI,KAAK,UAAU,EACvG,CACF,EC2BA,IAAqBC,EAArB,KAAmE,CAQjE,YACmBC,EACAC,EACAC,EACjB,CAHiB,UAAAF,EACA,aAAAC,EACA,mBAAAC,EATnB,KAAQ,oBAAmD,CAAC,EAE5D,KAAQ,oBAAgD,CAAC,EAEzD,KAAQ,mBAA8C,CAAC,EAOrD,KAAK,KAAOF,EACZ,KAAK,QAAUC,EACf,KAAK,cAAgBC,EAErB,KAAK,WAAa,IAAIC,EACpB,KAAK,KACL,KAAK,QACL,KAAK,aACP,EACA,KAAK,WAAa,IAAIC,EAAU,KAAK,KAAM,KAAK,OAAO,EACvD,KAAK,UAAY,IAAIC,EAAS,KAAK,KAAM,KAAK,OAAO,CACvD,CAEA,MAAM,UAAsC,CAC1C,OAAO,KAAK,QAAQ,IAAsB,KAAK,aAAa,CAAC,CAC/D,CAEA,MAAM,OAAOC,EAA2D,CACtE,OAAO,KAAK,QAAQ,MAAwB,KAAK,aAAa,EAAGA,CAAM,CACzE,CAEA,MAAM,QAAoC,CACxC,OAAO,KAAK,QAAQ,OAAyB,KAAK,aAAa,CAAC,CAClE,CAEA,MAAM,QAA2B,CAC/B,GAAI,CACF,aAAM,KAAK,SAAS,EACb,EACT,OAAS,EAAG,CACV,GAAI,aAAaC,EAAgB,MAAO,GACxC,MAAM,CACR,CACF,CAIA,UAAUC,EAAiD,CACzD,OAAKA,GAGC,KAAK,oBAAoBA,CAAU,IAAM,SAC3C,KAAK,oBAAoBA,CAAU,EAAI,IAAIC,GACzC,KAAK,KACLD,EACA,KAAK,OACP,GAEK,KAAK,oBAAoBA,CAAU,GATnC,KAAK,UAWhB,CAIA,UAAUE,EAA2C,CACnD,OAAIA,IAAe,OACV,KAAK,YAER,KAAK,oBAAoBA,CAAU,IAAM,SAC3C,KAAK,oBAAoBA,CAAU,EAAI,IAAIC,EACzC,KAAK,KACLD,EACA,KAAK,OACP,GAEK,KAAK,oBAAoBA,CAAU,EAE9C,CAIA,SAASE,EAAwC,CAC/C,OAAIA,IAAc,OACT,KAAK,WAER,KAAK,mBAAmBA,CAAS,IAAM,SACzC,KAAK,mBAAmBA,CAAS,EAAI,IAAIC,EACvC,KAAK,KACLD,EACA,KAAK,OACP,GAEK,KAAK,mBAAmBA,CAAS,EAE5C,CAEQ,cAAuB,CAC7B,MAAO,GAAGE,EAAY,YAAY,IAAI,KAAK,IAAI,EACjD,CACF,EChKA,IAAMC,GAAe,WAcAC,EAArB,MAAqBC,CAAQ,CAC3B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,OACJC,EACAC,EACgC,CAChC,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAI,EACtBC,CACF,CACF,CAEA,MAAM,UAAqD,CACzD,OAAO,KAAK,QAAQ,IAAqCL,EAAY,CACvE,CAEQ,aAAaM,EAAmB,CACtC,MAAO,GAAGJ,EAAQ,YAAY,IAAII,CAAS,EAC7C,CAEA,WAAW,cAAuB,CAChC,OAAON,EACT,CACF,ECrCA,IAAqBO,EAArB,KAA2B,CACzB,YAAoBC,EAAsBC,EAAkB,CAAxC,UAAAD,EAAsB,aAAAC,CAAmB,CAE7D,MAAM,UAA2C,CAC/C,OAAO,KAAK,QAAQ,IAA2B,KAAK,aAAa,CAAC,CACpE,CAEA,MAAM,QAAyC,CAC7C,OAAO,KAAK,QAAQ,OAA8B,KAAK,aAAa,CAAC,CACvE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAQ,YAAY,IAAI,KAAK,IAAI,EAC7C,CACF,ECjBA,OAAS,cAAAC,OAAkB,SAK3B,IAAMC,GAAe,QAYAC,EAArB,MAAqBC,CAAK,CACxB,YAAoBC,EAAkB,CAAlB,aAAAA,EAClB,KAAK,QAAUA,CACjB,CAEA,MAAM,OAAOC,EAA6C,CACxD,OAAO,KAAK,QAAQ,KAAgBF,EAAK,aAAcE,CAAM,CAC/D,CAEA,MAAM,UAAwC,CAC5C,OAAO,KAAK,QAAQ,IAAwBJ,EAAY,CAC1D,CAEA,wBACEK,EACAC,EACQ,CAGR,IAAMC,EAAa,KAAK,UAAUD,CAAU,EACtCE,EAAS,OAAO,KACpBT,GAAW,SAAUM,CAAS,EAAE,OAAOE,CAAU,EAAE,OAAO,QAAQ,CACpE,EACME,EAAYJ,EAAU,OAAO,EAAG,CAAC,EACjCK,EAAe,GAAGF,CAAM,GAAGC,CAAS,GAAGF,CAAU,GAEvD,OAAO,OAAO,KAAKG,CAAY,EAAE,SAAS,QAAQ,CACpD,CAEA,WAAW,cAAe,CACxB,OAAOV,EACT,CACF,EC7BA,IAAqBW,EAArB,KAAyB,CACvB,YAAoBC,EAAoBC,EAAkB,CAAtC,QAAAD,EAAoB,aAAAC,CAAmB,CAE3D,MAAM,UAA+B,CACnC,OAAO,KAAK,QAAQ,IAAe,KAAK,aAAa,CAAC,CACxD,CAEA,MAAM,QAAmC,CACvC,OAAO,KAAK,QAAQ,OAAwB,KAAK,aAAa,CAAC,CACjE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAK,YAAY,IAAI,KAAK,EAAE,EACxC,CACF,EChCA,IAAMC,GAAe,SAOAC,EAArB,KAA2B,CACzB,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,UAAyC,CAC7C,OAAO,KAAK,QAAQ,IAAyBF,EAAY,CAC3D,CACF,ECbA,IAAMG,GAAe,gBAsBAC,EAArB,KAA6B,CAC3B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,UAAqC,CACzC,OAAO,KAAK,QAAQ,IAAIF,EAAY,CACtC,CACF,EC5BA,IAAMG,GAAe,cAsBAC,EAArB,KAA6B,CAC3B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,UAAmC,CACvC,OAAO,KAAK,QAAQ,IAAIF,EAAY,CACtC,CACF,EC5BA,IAAMG,GAAe,UAMAC,EAArB,KAA4B,CAC1B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,UAAoC,CACxC,OAAO,KAAK,QAAQ,IAAoBF,EAAY,CACtD,CACF,ECZA,IAAMG,GAAe,cAEAC,GAArB,KAAgC,CAC9B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,QACJC,EACAC,EAAuC,CAAC,EAC1B,CACd,OAAO,KAAK,QAAQ,KAClB,GAAGJ,EAAY,IAAIG,CAAa,GAChC,CAAC,EACDC,CACF,CACF,CACF,ECPA,IAAMC,GAAe,gBAuBAC,EAArB,KAAiC,CAG/B,YACUC,EACAC,EACAC,EAA8B,GACtC,CAHQ,aAAAF,EACA,mBAAAC,EACA,wBAAAC,EAER,KAAK,iBAAmB,IAAIC,CAC9B,CAEA,YAAa,CACX,KAAK,iBAAiB,WAAW,CACnC,CAEA,MAAM,QACJC,EACAC,EAAkD,CAAC,EACnD,CACE,6BAAAC,EAA+B,KAAK,cACjC,4BACL,EAA+C,CAAC,EACf,CACjC,IAAMC,EAAoB,CAAC,EACvB,KAAK,qBACPA,EAAkB,cAAc,EAAI,cAGtC,IAAMC,EAAwB,CAAC,EAC3B,KAAK,cAAc,2BAA6B,KAClDA,EAAsB,UAAe,IAEvC,IAAMC,EAAc,OAAO,OAAO,CAAC,EAAGJ,EAAcG,CAAqB,EAEzE,OAAO,KAAK,iBAAiB,QAC3B,KAAK,QACL,KAAK,QAAQ,KACb,CAACV,GAAcM,EAAgBK,EAAaF,CAAiB,EAC7D,CAAE,wBAAyBD,CAA6B,CAC1D,CACF,CACF,ECrEA,IAAMI,GAAe,WAUAC,EAArB,MAAqBC,CAAQ,CAC3B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,OACJC,EACAC,EACuB,CACvB,OAAO,KAAK,QAAQ,IAAkB,KAAK,aAAaD,CAAQ,EAAGC,CAAM,CAC3E,CAEA,MAAM,UAA2C,CAC/C,OAAO,KAAK,QAAQ,IAA2B,KAAK,aAAa,CAAC,CACpE,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGJ,EAAQ,YAAY,GAC5BI,IAAc,OAAY,GAAK,IAAMA,CACvC,EACF,CAEA,WAAW,cAAuB,CAChC,OAAON,EACT,CACF,EC3BA,IAAqBO,GAArB,KAA4B,CAC1B,YAAoBC,EAA0BC,EAAkB,CAA5C,cAAAD,EAA0B,aAAAC,CAAmB,CAEjE,MAAM,UAAkC,CACtC,OAAO,KAAK,QAAQ,IAAkB,KAAK,aAAa,CAAC,CAC3D,CAEA,MAAM,QAAsC,CAC1C,OAAO,KAAK,QAAQ,OAA2B,KAAK,aAAa,CAAC,CACpE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAQ,YAAY,IAAI,KAAK,QAAQ,EACjD,CACF,ECfA,IAAMC,GAAe,mBAEAC,EAArB,MAAqBC,CAAe,CAClC,YAA6BC,EAAkB,CAAlB,aAAAA,EAC3B,KAAK,QAAUA,CACjB,CAEA,MAAM,OACJC,EACAC,EACoC,CACpC,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAI,EACtBC,CACF,CACF,CAEA,MAAM,UAAkD,CACtD,OAAO,KAAK,QAAQ,IAAkC,KAAK,aAAa,CAAC,CAC3E,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGJ,EAAe,YAAY,GACnCI,IAAc,OAAY,GAAK,IAAMA,CACvC,EACF,CAEA,WAAW,cAAe,CACxB,OAAON,EACT,CACF,ECTA,IAAqBO,GAArB,KAAmC,CACjC,YACUC,EACAC,EACR,CAFQ,UAAAD,EACA,aAAAC,CACP,CAEH,MAAM,UAAyC,CAC7C,OAAO,KAAK,QAAQ,IAAyB,KAAK,aAAa,CAAC,CAClE,CAEA,MAAM,QAA6C,CACjD,OAAO,KAAK,QAAQ,OAAkC,KAAK,aAAa,CAAC,CAC3E,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAe,YAAY,IAAI,KAAK,IAAI,EACpD,CACF,EC7CA,IAAMC,GAAe,oBAEAC,GAArB,MAAqBC,CAAgB,CACnC,YAA6BC,EAAkB,CAAlB,aAAAA,EAC3B,KAAK,QAAUA,CACjB,CAEA,MAAM,OACJC,EACqC,CACrC,OAAO,KAAK,QAAQ,KAClB,KAAK,aAAa,EAClBA,CACF,CACF,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGH,EAAgB,YAAY,GACpCG,IAAc,OAAY,GAAK,IAAMA,CACvC,EACF,CAEA,WAAW,cAAe,CACxB,OAAOL,EACT,CACF,ECvBA,IAAMM,GAAe,aAEAC,GAArB,KAA+B,CAK7B,YAA6BC,EAAkB,CAAlB,aAAAA,EAH7B,KAAiB,yBAA0D,CAAC,EAI1E,KAAK,QAAUA,EACf,KAAK,gBAAkB,IAAIC,EAAe,KAAK,OAAO,EACtD,KAAK,iBAAmB,IAAIC,GAAgB,KAAK,OAAO,CAC1D,CAEA,MAAMC,EAA6C,CACjD,OAAIA,IAAO,OACF,KAAK,iBAER,KAAK,yBAAyBA,CAAE,IAAM,SACxC,KAAK,yBAAyBA,CAAE,EAAI,IAAIC,GAAcD,EAAI,KAAK,OAAO,GAEjE,KAAK,yBAAyBA,CAAE,EAE3C,CAEA,QAA0B,CACxB,OAAO,KAAK,gBACd,CAEA,WAAW,cAAe,CACxB,OAAOL,EACT,CACF,ECjCA,IAAMO,GAAe,aAWAC,EAArB,MAAqBC,CAAU,CAC7B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,OACJC,EACAC,EACyB,CACzB,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAU,EAC5BC,CACF,CACF,CAEA,MAAM,UAA6C,CACjD,OAAO,KAAK,QAAQ,IAA6B,KAAK,aAAa,CAAC,CACtE,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGJ,EAAU,YAAY,GAC9BI,IAAc,OAAY,GAAK,IAAMA,CACvC,EACF,CAEA,WAAW,cAAuB,CAChC,OAAON,EACT,CACF,EC3BA,IAAqBO,GAArB,KAA8B,CAC5B,YACUC,EACAC,EACR,CAFQ,gBAAAD,EACA,aAAAC,CACP,CAEH,MAAM,UAAoC,CACxC,OAAO,KAAK,QAAQ,IAAoB,KAAK,aAAa,CAAC,CAC7D,CAEA,MAAM,QAAwC,CAC5C,OAAO,KAAK,QAAQ,OAA6B,KAAK,aAAa,CAAC,CACtE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAU,YAAY,IAAI,KAAK,UAAU,EACrD,CACF,ECxBA,IAAMC,GAAe,wBAEAC,EAArB,MAAqBC,CAAmB,CACtC,YAA6BC,EAAkB,CAAlB,aAAAA,EAC3B,KAAK,QAAUA,CACjB,CAEA,MAAM,OACJC,EACwC,CACxC,OAAO,KAAK,QAAQ,KAClB,KAAK,aAAa,EAClBA,CACF,CACF,CAEA,MAAM,UAA+C,CACnD,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAa,CACpB,CACF,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGH,EAAmB,YAAY,GACvCG,IAAc,OAAY,GAAK,IAAMA,CACvC,EACF,CAEA,WAAW,cAAe,CACxB,OAAOL,EACT,CACF,ECjBA,IAAqBM,GAArB,KAAuC,CACrC,YACUC,EACAC,EACR,CAFQ,QAAAD,EACA,aAAAC,CACP,CAEH,MAAM,OACJC,EACwC,CACxC,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAa,EAClBA,CACF,CACF,CAEA,MAAM,UAA6C,CACjD,OAAO,KAAK,QAAQ,IAA6B,KAAK,aAAa,CAAC,CACtE,CAEA,MAAM,QAAiD,CACrD,OAAO,KAAK,QAAQ,OAClB,KAAK,aAAa,CACpB,CACF,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAmB,YAAY,IAAI,KAAK,EAAE,EACtD,CACF,EC3CA,IAAMC,GAAe,iBAMAC,EAArB,KAAmC,CAOjC,YAA6BC,EAAkB,CAAlB,aAAAA,EAL7B,KAAiB,6BAGb,CAAC,EAGH,KAAK,QAAUA,EACf,KAAK,qBAAuB,IAAIC,EAAmB,KAAK,OAAO,CACjE,CAEA,MAAM,UAAiD,CACrD,OAAO,KAAK,QAAQ,IAAiCH,EAAY,CACnE,CAIA,OAAOI,EAAqD,CAC1D,OAAIA,IAAO,OACF,KAAK,sBAER,KAAK,6BAA6BA,CAAE,IAAM,SAC5C,KAAK,6BAA6BA,CAAE,EAAI,IAAIC,GAC1CD,EACA,KAAK,OACP,GAEK,KAAK,6BAA6BA,CAAE,EAE/C,CAEA,WAAW,cAAe,CACxB,OAAOJ,EACT,CACF,EC5BA,IAAqBM,GAArB,KAAkC,CAChC,YACUC,EACAC,EACR,CAFQ,QAAAD,EACA,aAAAC,CACP,CAEH,MAAM,UAA0C,CAC9C,OAAO,KAAK,QAAQ,IAA0B,KAAK,aAAa,CAAC,CACnE,CAEA,MAAM,OACJC,EACmC,CACnC,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAa,EAClBA,CACF,CACF,CAEA,MAAM,QAA4C,CAChD,OAAO,KAAK,QAAQ,OAAiC,KAAK,aAAa,CAAC,CAC1E,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAc,YAAY,IAAI,KAAK,EAAE,EACjD,CACF,ECpBA,IAAqBC,GAArB,KAA4B,CAuB1B,YAAYC,EAA+B,CACzCA,EAAQ,uBAAyBA,EAAQ,wBAA0B,GAEnE,KAAK,cAAgB,IAAIC,EAAcD,CAAO,EAC9C,KAAK,QAAU,IAAIE,EAAQ,KAAK,aAAa,EAC7C,KAAK,MAAQ,IAAIC,EAAM,KAAK,OAAO,EACnC,KAAK,QAAU,IAAIC,EAAQ,KAAK,OAAO,EACvC,KAAK,MAAQ,IAAIA,EAAM,KAAK,OAAO,EACnC,KAAK,OAAS,IAAIC,EAAO,KAAK,OAAO,EACrC,KAAK,WAAa,IAAIC,GAAW,KAAK,OAAO,EAC7C,KAAK,YAAc,IAAIC,EAAY,KAAK,QAAS,KAAK,aAAa,EACnE,KAAK,aAAe,IAAIC,EAAY,KAAK,OAAO,EAChD,KAAK,sBAAwB,CAAC,EAC9B,KAAK,SAAW,IAAIC,EAAQ,KAAK,OAAO,EACxC,KAAK,kBAAoB,CAAC,EAC1B,KAAK,MAAQ,IAAIC,EAAK,KAAK,OAAO,EAClC,KAAK,eAAiB,CAAC,EACvB,KAAK,SAAW,IAAIC,EAAQ,KAAK,OAAO,EACxC,KAAK,kBAAoB,CAAC,EAC1B,KAAK,WAAa,IAAIC,EAAU,KAAK,OAAO,EAC5C,KAAK,oBAAsB,CAAC,EAC5B,KAAK,UAAY,IAAIC,GAAU,KAAK,OAAO,EAC3C,KAAK,eAAiB,IAAIC,EAAc,KAAK,OAAO,EACpD,KAAK,wBAA0B,CAAC,CAClC,CAMA,YAAYC,EAAmD,CAC7D,OAAIA,IAAmB,OACd,KAAK,cAER,KAAK,sBAAsBA,CAAc,IAAM,SACjD,KAAK,sBAAsBA,CAAc,EAAI,IAAIC,EAC/CD,EACA,KAAK,QACL,KAAK,aACP,GAEK,KAAK,sBAAsBA,CAAc,EAEpD,CAIA,QAAQE,EAAqC,CAC3C,OAAIA,IAAc,OACT,KAAK,UAER,KAAK,kBAAkBA,CAAS,IAAM,SACxC,KAAK,kBAAkBA,CAAS,EAAI,IAAIC,EAAMD,EAAW,KAAK,OAAO,GAEhE,KAAK,kBAAkBA,CAAS,EAE3C,CAIA,KAAKE,EAAyB,CAC5B,OAAIA,IAAO,OACF,KAAK,OAER,KAAK,eAAeA,CAAE,IAAM,SAC9B,KAAK,eAAeA,CAAE,EAAI,IAAIC,EAAID,EAAI,KAAK,OAAO,GAE7C,KAAK,eAAeA,CAAE,EAEjC,CAIA,QAAQA,EAA+B,CACrC,OAAIA,IAAO,OACF,KAAK,UAER,KAAK,kBAAkBA,CAAE,IAAM,SACjC,KAAK,kBAAkBA,CAAE,EAAI,IAAIE,GAAOF,EAAI,KAAK,OAAO,GAEnD,KAAK,kBAAkBA,CAAE,EAEpC,CAIA,UAAUA,EAAmC,CAC3C,OAAIA,IAAO,OACF,KAAK,YAER,KAAK,oBAAoBA,CAAE,IAAM,SACnC,KAAK,oBAAoBA,CAAE,EAAI,IAAIG,GAASH,EAAI,KAAK,OAAO,GAEvD,KAAK,oBAAoBA,CAAE,EAEtC,CAIA,cAAcA,EAA2C,CACvD,OAAIA,IAAO,OACF,KAAK,gBAER,KAAK,wBAAwBA,CAAE,IAAM,SACvC,KAAK,wBAAwBA,CAAE,EAAI,IAAII,GAAaJ,EAAI,KAAK,OAAO,GAE/D,KAAK,wBAAwBA,CAAE,EAE1C,CACF,ECxJO,IAAMK,GAAN,KAA8D,CAGnE,YACmBC,EACAC,EACAC,EACjB,CAHiB,UAAAF,EACA,aAAAC,EACA,mBAAAC,EAEjB,KAAK,WAAa,IAAIC,EACpB,KAAK,KACL,KAAK,QACL,KAAK,aACP,CACF,CAEA,WAAoC,CAClC,OAAO,KAAK,UACd,CACF,EChBA,IAAqBC,GAArB,KAAkC,CAMhC,YAAYC,EAA+B,CACzCA,EAAQ,uBAAyBA,EAAQ,wBAA0B,GAEjEA,EAAQ,yBAA2B,KAClCA,EAAQ,QAAU,IAAI,OAAS,MAEhC,QAAQ,KACN,mIACF,EACAA,EAAQ,uBAAyB,IAGnC,KAAK,cAAgB,IAAIC,EAAcD,CAAO,EAC9C,KAAK,QAAU,IAAIE,EAAQ,KAAK,aAAa,EAC7C,KAAK,YAAc,IAAIC,EAAY,KAAK,QAAS,KAAK,cAAe,EAAI,EACzE,KAAK,sBAAwB,CAAC,CAChC,CAEA,YAAa,CACX,KAAK,YAAY,WAAW,EAG5B,OAAO,QAAQ,KAAK,qBAAqB,EAAE,QAAQ,CAAC,CAACC,EAAGC,CAAU,IAAM,CACtEA,EAAW,UAAU,EAAE,WAAW,CACpC,CAAC,CACH,CAEA,YACEC,EAC8D,CAC9D,GAAKA,EAMH,OAAI,KAAK,sBAAsBA,CAAc,IAAM,SACjD,KAAK,sBAAsBA,CAAc,EAAI,IAAIC,GAC/CD,EACA,KAAK,QACL,KAAK,aACP,GAEK,KAAK,sBAAsBA,CAAc,EAZhD,MAAM,IAAI,MACR,8LAEF,CAWJ,CACF,ECrDA,IAAOE,GAAQ,CAAE,OAAAC,GAAQ,aAAAC,GAAc,OAAAC,EAAO","names":["logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","axios","HTTPAgent","HTTPSAgent","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","source","axios","response","error","candidateNode","i","isDueForHealthcheck","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RESOURCEPATH","Collections","apiCall","schema","options","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","key","queryParams","operation","Collections","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","createHmac","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","Typesense_default","Client","SearchClient","Errors_exports"]} \ No newline at end of file diff --git a/lib/Typesense.d.mts b/lib/Typesense.d.mts index 4654ff7a..de2d2e73 100644 --- a/lib/Typesense.d.mts +++ b/lib/Typesense.d.mts @@ -1,4 +1,4 @@ -import { LogLevelDesc, Logger } from 'loglevel'; +import logger from 'loglevel'; import { Agent } from 'http'; import { Agent as Agent$1 } from 'https'; import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; @@ -44,8 +44,8 @@ interface ConfigurationOptions { useServerSideSearchCache?: boolean; cacheSearchResultsForSeconds?: number; additionalHeaders?: Record; - logLevel?: LogLevelDesc; - logger?: Logger; + logLevel?: logger.LogLevelDesc; + logger?: logger.Logger; /** * Set a custom HTTP Agent * @@ -88,8 +88,8 @@ declare class Configuration { readonly sendApiKeyAsQueryParam?: boolean; readonly cacheSearchResultsForSeconds: number; readonly useServerSideSearchCache: boolean; - readonly logger: Logger; - readonly logLevel: LogLevelDesc; + readonly logger: logger.Logger; + readonly logLevel: logger.LogLevelDesc; readonly additionalHeaders?: Record; readonly httpAgent?: Agent; readonly httpsAgent?: Agent$1; diff --git a/lib/Typesense.d.ts b/lib/Typesense.d.ts index 4654ff7a..de2d2e73 100644 --- a/lib/Typesense.d.ts +++ b/lib/Typesense.d.ts @@ -1,4 +1,4 @@ -import { LogLevelDesc, Logger } from 'loglevel'; +import logger from 'loglevel'; import { Agent } from 'http'; import { Agent as Agent$1 } from 'https'; import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; @@ -44,8 +44,8 @@ interface ConfigurationOptions { useServerSideSearchCache?: boolean; cacheSearchResultsForSeconds?: number; additionalHeaders?: Record; - logLevel?: LogLevelDesc; - logger?: Logger; + logLevel?: logger.LogLevelDesc; + logger?: logger.Logger; /** * Set a custom HTTP Agent * @@ -88,8 +88,8 @@ declare class Configuration { readonly sendApiKeyAsQueryParam?: boolean; readonly cacheSearchResultsForSeconds: number; readonly useServerSideSearchCache: boolean; - readonly logger: Logger; - readonly logLevel: LogLevelDesc; + readonly logger: logger.Logger; + readonly logLevel: logger.LogLevelDesc; readonly additionalHeaders?: Record; readonly httpAgent?: Agent; readonly httpsAgent?: Agent$1; diff --git a/lib/Typesense.min.js b/lib/Typesense.min.js index c629e230..b00e14d2 100644 --- a/lib/Typesense.min.js +++ b/lib/Typesense.min.js @@ -1,9 +1,9 @@ -"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};var _loglevel = require('loglevel'); var be = _interopRequireWildcard(_loglevel);var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||be,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var _http = require('http');var _https = require('https');var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new (0, _http.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new (0, _https.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=_axios2.default.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await _axios2.default.call(void 0, l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,_optionalChain([m, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message])));throw this.customErrorForResponse(m,_optionalChain([m, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]))}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(_optionalChain([l, 'access', _6 => _6.response, 'optionalAccess', _7 => _7.data]))}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel);var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||_loglevel2.default,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var _http = require('http');var _https = require('https');var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new (0, _http.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new (0, _https.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=_axios2.default.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await _axios2.default.call(void 0, l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,_optionalChain([m, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message])));throw this.customErrorForResponse(m,_optionalChain([m, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]))}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(_optionalChain([l, 'access', _6 => _6.response, 'optionalAccess', _7 => _7.data]))}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` `)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object Please try reducing the number of keys in your document, or using CURL to import your data. `):new Error(n)}else r=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se});if(Array.isArray(e)){let n=s.split(` `).map(I=>JSON.parse(I)),o=n.filter(I=>I.success===!1);if(o.length>0)throw new f(`${n.length-o.length} documents imported successfully, ${o.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n);return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se})).split(` -`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};var _crypto = require('crypto');var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(_crypto.createHmac.call(void 0, "sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Di={Client:le,SearchClient:ce,Errors:he};exports.Client = le; exports.Errors = he; exports.SearchClient = ce; exports.default = Di; +`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};var _crypto = require('crypto');var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(_crypto.createHmac.call(void 0, "sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var $i={Client:le,SearchClient:ce,Errors:he};exports.Client = le; exports.Errors = he; exports.SearchClient = ce; exports.default = $i; //# sourceMappingURL=Typesense.min.js.map \ No newline at end of file diff --git a/lib/Typesense.min.js.map b/lib/Typesense.min.js.map index 55e62084..75a3baad 100644 --- a/lib/Typesense.min.js.map +++ b/lib/Typesense.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["/home/fanis/code/typesense/typesense-js/lib/Typesense.min.js","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/MultiSearch.ts"],"names":["Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","importResults","Configuration","options","node","logger","key","array","i","j","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException"],"mappings":"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","file":"/home/fanis/code/typesense/typesense-js/lib/Typesense.min.js","sourcesContent":[null,"import * as logger from \"loglevel\";\nimport { Logger, LogLevelDesc } from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: LogLevelDesc;\n logger?: Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: Logger;\n readonly logLevel: LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["/home/fanis/code/typesense/typesense-js/lib/Typesense.min.js","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/MultiSearch.ts"],"names":["Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","importResults","Configuration","options","node","logger","key","array","i","j","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException"],"mappings":"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","file":"/home/fanis/code/typesense/typesense-js/lib/Typesense.min.js","sourcesContent":[null,"import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n"]} \ No newline at end of file diff --git a/lib/Typesense.min.mjs b/lib/Typesense.min.mjs index 5a14d597..e73d15fa 100644 --- a/lib/Typesense.min.mjs +++ b/lib/Typesense.min.mjs @@ -1,9 +1,9 @@ -var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};import*as be from"loglevel";var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||be,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};import fe from"axios";import{Agent as xe}from"http";import{Agent as Te}from"https";var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new xe({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new Te({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=fe.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await fe(l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,m.data?.message));throw this.customErrorForResponse(m,m.data?.message)}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(l.response?.data)}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` +var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};import be from"loglevel";var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||be,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};import fe from"axios";import{Agent as xe}from"http";import{Agent as Te}from"https";var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new xe({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new Te({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=fe.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await fe(l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,m.data?.message));throw this.customErrorForResponse(m,m.data?.message)}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(l.response?.data)}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` `)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object Please try reducing the number of keys in your document, or using CURL to import your data. `):new Error(n)}else r=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se});if(Array.isArray(e)){let n=s.split(` `).map(I=>JSON.parse(I)),o=n.filter(I=>I.success===!1);if(o.length>0)throw new f(`${n.length-o.length} documents imported successfully, ${o.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n);return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se})).split(` -`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};import{createHmac as He}from"crypto";var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(He("sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Di={Client:le,SearchClient:ce,Errors:he};export{le as Client,he as Errors,ce as SearchClient,Di as default}; +`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};import{createHmac as He}from"crypto";var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(He("sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var $i={Client:le,SearchClient:ce,Errors:he};export{le as Client,he as Errors,ce as SearchClient,$i as default}; //# sourceMappingURL=Typesense.min.mjs.map \ No newline at end of file diff --git a/lib/Typesense.min.mjs.map b/lib/Typesense.min.mjs.map index d12b7406..bbe62e0b 100644 --- a/lib/Typesense.min.mjs.map +++ b/lib/Typesense.min.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Collections.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/Client.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense.ts"],"sourcesContent":["import * as logger from \"loglevel\";\nimport { Logger, LogLevelDesc } from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: LogLevelDesc;\n logger?: Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: Logger;\n readonly logLevel: LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n this.responseCache.delete(oldestEntry);\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n this.responsePromiseCache.delete(oldestEntry);\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n for (const key in searchParameters) {\n if (Array.isArray(searchParameters[key])) {\n additionalQueryParams[key] = searchParameters[key].join(\",\");\n }\n }\n const queryParams = Object.assign(\n {},\n searchParameters,\n additionalQueryParams\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Overrides.RESOURCEPATH}/${this.overrideId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Synonyms.RESOURCEPATH}/${this.synonymId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Documents.RESOURCEPATH}/${this.documentId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${aliasName}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${this.name}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const paramsJSON = JSON.stringify(parameters);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(private id: number, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | string,\n queryParameters: Record = {}\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema\n ): Promise {\n return this.apiCall.put(this.endpointPath(presetId), params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${this.presetId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${this.stopwordId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${this.id}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import Client from \"./Typesense/Client\";\nimport SearchClient from \"./Typesense/SearchClient\";\nimport * as Errors from \"./Typesense/Errors\";\n\nexport { Client, SearchClient, Errors };\nexport default { Client, SearchClient, Errors };\n"],"mappings":"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","names":["logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","axios","HTTPAgent","HTTPSAgent","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","source","axios","response","error","candidateNode","i","isDueForHealthcheck","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RESOURCEPATH","Collections","apiCall","schema","options","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","key","queryParams","operation","Collections","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","createHmac","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","Typesense_default","Client","SearchClient","Errors_exports"]} \ No newline at end of file +{"version":3,"sources":["../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Collections.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/Client.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense.ts"],"sourcesContent":["import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n this.responseCache.delete(oldestEntry);\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n this.responsePromiseCache.delete(oldestEntry);\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n for (const key in searchParameters) {\n if (Array.isArray(searchParameters[key])) {\n additionalQueryParams[key] = searchParameters[key].join(\",\");\n }\n }\n const queryParams = Object.assign(\n {},\n searchParameters,\n additionalQueryParams\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Overrides.RESOURCEPATH}/${this.overrideId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Synonyms.RESOURCEPATH}/${this.synonymId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Documents.RESOURCEPATH}/${this.documentId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${aliasName}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${this.name}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const paramsJSON = JSON.stringify(parameters);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(private id: number, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | string,\n queryParameters: Record = {}\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema\n ): Promise {\n return this.apiCall.put(this.endpointPath(presetId), params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${this.presetId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${this.stopwordId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${this.id}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import Client from \"./Typesense/Client\";\nimport SearchClient from \"./Typesense/SearchClient\";\nimport * as Errors from \"./Typesense/Errors\";\n\nexport { Client, SearchClient, Errors };\nexport default { Client, SearchClient, Errors };\n"],"mappings":"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","names":["logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","axios","HTTPAgent","HTTPSAgent","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","source","axios","response","error","candidateNode","i","isDueForHealthcheck","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RESOURCEPATH","Collections","apiCall","schema","options","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","key","queryParams","operation","Collections","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","createHmac","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","Typesense_default","Client","SearchClient","Errors_exports"]} \ No newline at end of file diff --git a/tsup.config.ts b/tsup.config.ts index c551f041..fc95efeb 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -3,7 +3,6 @@ import type { Options } from "tsup"; import browserList from "browserslist-to-esbuild"; import { nodeModulesPolyfillPlugin } from "esbuild-plugins-node-modules-polyfill"; import { builtinModules } from "module"; -import { commonjs } from "@hyrious/esbuild-plugin-commonjs"; export default defineConfig([ { @@ -23,11 +22,13 @@ export default defineConfig([ splitting: true, platform: "browser", external: [...builtinModules], + esbuildOptions(options) { + options.mainFields = ["module", "main", "browser"]; + }, esbuildPlugins: [ nodeModulesPolyfillPlugin({ fallback: "empty", }), - commonjs(), ], }, { @@ -45,6 +46,8 @@ export default defineConfig([ }; }, splitting: true, - esbuildPlugins: [commonjs()], + esbuildOptions(options) { + options.mainFields = ["module", "main"]; + }, }, ]); From 838c9bd631fcd1e1b60705c5388d4354000b91e0 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Wed, 21 Aug 2024 14:33:24 +0300 Subject: [PATCH 06/45] fix: avoid reusing logger import from `loglevel` --- src/Typesense/Configuration.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Typesense/Configuration.ts b/src/Typesense/Configuration.ts index 60d7497f..a32e8543 100644 --- a/src/Typesense/Configuration.ts +++ b/src/Typesense/Configuration.ts @@ -1,5 +1,4 @@ -import * as logger from "loglevel"; -import { Logger, LogLevelDesc } from "loglevel"; +import logger from "loglevel"; import { MissingConfigurationError } from "./Errors"; import type { Agent as HTTPAgent } from "http"; import type { Agent as HTTPSAgent } from "https"; @@ -61,8 +60,8 @@ export interface ConfigurationOptions { cacheSearchResultsForSeconds?: number; additionalHeaders?: Record; - logLevel?: LogLevelDesc; - logger?: Logger; + logLevel?: logger.LogLevelDesc; + logger?: logger.Logger; /** * Set a custom HTTP Agent @@ -127,8 +126,8 @@ export default class Configuration { readonly sendApiKeyAsQueryParam?: boolean; readonly cacheSearchResultsForSeconds: number; readonly useServerSideSearchCache: boolean; - readonly logger: Logger; - readonly logLevel: LogLevelDesc; + readonly logger: logger.Logger; + readonly logLevel: logger.LogLevelDesc; readonly additionalHeaders?: Record; readonly httpAgent?: HTTPAgent; readonly httpsAgent?: HTTPSAgent; From 2b51b8547da30da14f289d6c731e2d15a3eb3957 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Wed, 21 Aug 2024 16:10:56 +0300 Subject: [PATCH 07/45] chore: remove uneeded common-js dependency for esbuild --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index c8322813..beb29c81 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,6 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/register": "^7.22.15", - "@hyrious/esbuild-plugin-commonjs": "^0.2.4", "@types/node": "^20.8.9", "@typescript-eslint/eslint-plugin": "^6.9.1", "@typescript-eslint/parser": "^6.9.1", From 8a6596d574a776e1e86bc67b0194bf6f09e131f2 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Wed, 21 Aug 2024 16:23:49 +0300 Subject: [PATCH 08/45] chore: add prepare script to run before package publishing --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index beb29c81..0a84e8d6 100644 --- a/package.json +++ b/package.json @@ -106,6 +106,7 @@ "scripts": { "format": "prettier --write \"(src|test|doc)/**/*.(ts|json|js)\"", "pretest": "eslint .", + "prepare": "npm run build", "test": "nyc --reporter=html --reporter=text ts-mocha --require @babel/register --recursive", "build": "tsup", "build:tsc": "tsc", From b337526148a78f47fa165d1de4dbef80b4ebc731 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Wed, 21 Aug 2024 16:58:59 +0300 Subject: [PATCH 09/45] chore: update package-lock based on changes --- package-lock.json | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 10d2f981..b2492827 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,6 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/register": "^7.22.15", - "@hyrious/esbuild-plugin-commonjs": "^0.2.4", "@types/node": "^20.8.9", "@typescript-eslint/eslint-plugin": "^6.9.1", "@typescript-eslint/parser": "^6.9.1", @@ -2545,25 +2544,6 @@ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, - "node_modules/@hyrious/esbuild-plugin-commonjs": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@hyrious/esbuild-plugin-commonjs/-/esbuild-plugin-commonjs-0.2.4.tgz", - "integrity": "sha512-NKR8bsDbNP7EpM//cjoo8Bpihmc97gPpnwrggG+18iSGow6oaJpfmy3Bv+oBgPkPlxcGzC9SXh+6szoCoKFvCw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "cjs-module-lexer": "*", - "esbuild": "*" - }, - "peerDependenciesMeta": { - "cjs-module-lexer": { - "optional": true - } - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", From 3b69e102f0a8d9d3381954614cdc2936faf93791 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Wed, 5 Feb 2025 15:58:11 +0200 Subject: [PATCH 10/45] feat(build): export types and fix browser polyfills - add type exports for all modules via `export type *` - fix browser polyfills by using `empty` modules for node builtins - fix output directories by swapping `lib` and `dist` outputs - update mainFields to prioritize browser field --- src/Typesense.ts | 35 +++++++++++++++++++++++++++++++---- tsup.config.ts | 32 +++++++++++++++++++++++--------- 2 files changed, 54 insertions(+), 13 deletions(-) diff --git a/src/Typesense.ts b/src/Typesense.ts index 2d485da6..8f5cdd2a 100644 --- a/src/Typesense.ts +++ b/src/Typesense.ts @@ -1,6 +1,33 @@ -import Client from "./Typesense/Client"; import SearchClient from "./Typesense/SearchClient"; -import * as Errors from "./Typesense/Errors"; +import Client from "./Typesense/Client"; + +export { SearchClient }; +export { Client }; +export * as Errors from "./Typesense/Errors"; -export { Client, SearchClient, Errors }; -export default { Client, SearchClient, Errors }; +export type * from "./Typesense/Aliases"; +export type * from "./Typesense/AnalyticsEvent"; +export type * from "./Typesense/AnalyticsRule"; +export type * from "./Typesense/AnalyticsRules"; +export type * from "./Typesense/Collection"; +export type * from "./Typesense/Collections"; +export type * from "./Typesense/Configuration"; +export type * from "./Typesense/Conversations"; +export type * from "./Typesense/Conversation"; +export type * from "./Typesense/ConversationModel"; +export type * from "./Typesense/Debug"; +export type * from "./Typesense/Documents"; +export type * from "./Typesense/Health"; +export type * from "./Typesense/Key"; +export type * from "./Typesense/Keys"; +export type * from "./Typesense/Metrics"; +export type * from "./Typesense/MultiSearch"; +export type * from "./Typesense/Override"; +export type * from "./Typesense/Overrides"; +export type * from "./Typesense/Preset"; +export type * from "./Typesense/Presets"; +export type * from "./Typesense/Stats"; +export type * from "./Typesense/Stopword"; +export type * from "./Typesense/Stopwords"; +export type * from "./Typesense/Synonym"; +export type * from "./Typesense/Synonyms"; diff --git a/tsup.config.ts b/tsup.config.ts index fc95efeb..33d140d3 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -2,7 +2,6 @@ import { defineConfig } from "tsup"; import type { Options } from "tsup"; import browserList from "browserslist-to-esbuild"; import { nodeModulesPolyfillPlugin } from "esbuild-plugins-node-modules-polyfill"; -import { builtinModules } from "module"; export default defineConfig([ { @@ -12,7 +11,7 @@ export default defineConfig([ clean: true, format: ["cjs", "esm"], dts: true, - outDir: "dist", + outDir: "lib", minify: true, outExtension({ format }) { return { @@ -21,24 +20,28 @@ export default defineConfig([ }, splitting: true, platform: "browser", - external: [...builtinModules], esbuildOptions(options) { - options.mainFields = ["module", "main", "browser"]; + options.mainFields = ["browser", "module", "main"]; + options.treeShaking = true; }, esbuildPlugins: [ nodeModulesPolyfillPlugin({ - fallback: "empty", + modules: { + crypto: "empty", + http: "empty", + https: "empty", + }, }), ], }, { target: browserList(["defaults"]) as Options["target"], entry: ["src/Typesense.ts"], + sourcemap: true, clean: true, - format: ["esm", "cjs"], + format: ["cjs", "esm"], dts: true, - sourcemap: true, - outDir: "lib", + outDir: "dist", minify: true, outExtension({ format }) { return { @@ -46,8 +49,19 @@ export default defineConfig([ }; }, splitting: true, + platform: "browser", esbuildOptions(options) { - options.mainFields = ["module", "main"]; + options.mainFields = ["browser", "module", "main"]; + options.treeShaking = true; }, + esbuildPlugins: [ + nodeModulesPolyfillPlugin({ + modules: { + crypto: "empty", + http: "empty", + https: "empty", + }, + }), + ], }, ]); From 72f1b988ea14dd9c603d096fa9f6d2f3f8b7aba9 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Wed, 5 Feb 2025 16:00:15 +0200 Subject: [PATCH 11/45] chore(build): remove peer dependency for babel runtime --- package-lock.json | 14 ++++++++++---- package.json | 3 --- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index b2492827..cc0e7265 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,9 +64,6 @@ }, "engines": { "node": ">=18" - }, - "peerDependencies": { - "@babel/runtime": "^7.23.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -1861,6 +1858,7 @@ "version": "7.23.9", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -10252,7 +10250,8 @@ "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true }, "node_modules/regenerator-transform": { "version": "0.15.2", @@ -11901,6 +11900,13 @@ } } }, + "node_modules/tsup/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, "node_modules/tsup/node_modules/source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", diff --git a/package.json b/package.json index 0a84e8d6..f7a68fca 100644 --- a/package.json +++ b/package.json @@ -128,9 +128,6 @@ "loglevel": "^1.8.1", "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/runtime": "^7.23.2" - }, "engines": { "node": ">=18" } From 0c8c173450851b63037db0a9e4ceba630afdb49b Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Wed, 5 Feb 2025 16:05:22 +0200 Subject: [PATCH 12/45] chore: build artifacts --- dist/Typesense.d.mts | 217 ++++++++++++++++++++++--------------- dist/Typesense.d.ts | 217 ++++++++++++++++++++++--------------- dist/Typesense.min.js | 10 +- dist/Typesense.min.js.map | 2 +- dist/Typesense.min.mjs | 10 +- dist/Typesense.min.mjs.map | 2 +- lib/Typesense.d.mts | 217 ++++++++++++++++++++++--------------- lib/Typesense.d.ts | 217 ++++++++++++++++++++++--------------- lib/Typesense.min.js | 10 +- lib/Typesense.min.js.map | 2 +- lib/Typesense.min.mjs | 10 +- lib/Typesense.min.mjs.map | 2 +- 12 files changed, 540 insertions(+), 376 deletions(-) diff --git a/dist/Typesense.d.mts b/dist/Typesense.d.mts index de2d2e73..9814771e 100644 --- a/dist/Typesense.d.mts +++ b/dist/Typesense.d.mts @@ -3,6 +3,7 @@ import { Agent } from 'http'; import { Agent as Agent$1 } from 'https'; import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; import { ReadStream } from 'fs'; +import { ReadStream as ReadStream$1 } from 'node:fs'; interface NodeConfiguration { host: string; @@ -76,6 +77,17 @@ interface ConfigurationOptions { * @type {any} */ paramsSerializer?: any; + /** + * Set a custom axios adapter + * + * Useful for customizing the underlying HTTP client library used by Typesense. + * + * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge. + * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161 + * + * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config + */ + axiosAdapter?: AxiosRequestConfig["adapter"]; } declare class Configuration { readonly nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; @@ -94,6 +106,7 @@ declare class Configuration { readonly httpAgent?: Agent; readonly httpsAgent?: Agent$1; readonly paramsSerializer?: any; + readonly axiosAdapter?: AxiosRequestConfig["adapter"]; constructor(options: ConfigurationOptions); validate(): boolean; private validateNodes; @@ -106,7 +119,8 @@ declare class Configuration { declare class TypesenseError extends Error { httpStatus?: number; - constructor(message?: string); + httpBody?: string; + constructor(message?: string, httpBody?: string, httpStatus?: number); } interface Node extends NodeConfiguration { @@ -135,6 +149,7 @@ declare class ApiCall { post(endpoint: string, bodyParameters?: any, queryParameters?: any, additionalHeaders?: any): Promise; put(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; patch(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + private getAdapter; performRequest(requestType: Method, endpoint: string, { queryParameters, bodyParameters, additionalHeaders, abortSignal, responseType, skipConnectionTimeout, enableKeepAlive, }: { queryParameters?: any; bodyParameters?: any; @@ -151,7 +166,7 @@ declare class ApiCall { uriFor(endpoint: string, node: any): string; defaultHeaders(): any; timer(seconds: any): Promise; - customErrorForResponse(response: AxiosResponse, messageFromServer: string): TypesenseError; + customErrorForResponse(response: AxiosResponse, messageFromServer: string, httpBody?: string): TypesenseError; } declare class RequestWithCache { @@ -199,13 +214,28 @@ type DocumentSchema = Record; interface SearchParamsWithPreset extends Partial { preset: string; } +type DropTokensMode = "right_to_left" | "left_to_right" | "both_sides:3"; type OperationMode = "off" | "always" | "fallback"; +type UnionArrayKeys = { + [K in keyof T]: T[K] extends undefined ? never : NonNullable extends infer R ? R extends R[] ? never : R extends (infer U)[] | infer U ? U[] extends R ? K : never : never : never; +}[keyof T] & keyof T; +type UnionArraySearchParams = UnionArrayKeys; +type ArraybleParams = { + readonly [K in UnionArraySearchParams]: string; +}; +type ExtractBaseTypes = { + [K in keyof T]: K extends UnionArrayKeys ? T[K] extends (infer U)[] | infer U ? U : T[K] : T[K]; +}; +declare const arrayableParams: ArraybleParams; interface SearchParams { - q?: string; + q?: "*" | (string & {}); query_by?: string | string[]; query_by_weights?: string | number[]; prefix?: string | boolean | boolean[]; filter_by?: string; + enable_synonyms?: boolean; + enable_analytics?: boolean; + filter_curated_hits?: boolean; enable_lazy_filter?: boolean; sort_by?: string | string[]; facet_by?: string | string[]; @@ -215,6 +245,7 @@ interface SearchParams { facet_query?: string; facet_query_num_typos?: number; facet_return_parent?: string; + facet_strategy?: "exhaustive" | "top_values" | "automatic"; page?: number; per_page?: number; group_by?: string | string[]; @@ -235,12 +266,14 @@ interface SearchParams { split_join_tokens?: OperationMode; exhaustive_search?: boolean; drop_tokens_threshold?: number; + drop_tokens_mode?: DropTokensMode; typo_tokens_threshold?: number; pinned_hits?: string | string[]; hidden_hits?: string | string[]; limit_hits?: number; pre_segmented_query?: boolean; enable_overrides?: boolean; + override_tags?: string | string[]; prioritize_exact_match?: boolean; prioritize_token_position?: boolean; prioritize_num_matching_fields?: boolean; @@ -285,10 +318,10 @@ interface SearchResponseHit { document: T; text_match: number; text_match_info?: { - best_field_score: string; + best_field_score: `${number}`; best_field_weight: number; fields_matched: number; - score: string; + score: `${number}`; tokens_matched: number; }; } @@ -411,6 +444,55 @@ declare class Documents extends SearchOnlyDoc exportStream(options?: DocumentsExportParameters): Promise; } +interface MultiSearchRequestSchema extends SearchParams { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestsSchema { + searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; +} +interface MultiSearchResponse { + results: { + [Index in keyof T]: SearchResponse; + } & { + length: T["length"]; + }; +} +declare class MultiSearch { + private apiCall; + private configuration; + private useTextContentType; + private requestWithCache; + constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); + clearCache(): void; + perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { + cacheSearchResultsForSeconds?: number; + }): Promise>; +} + +declare class SearchOnlyCollection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + constructor(name: string, apiCall: ApiCall, configuration: any); + documents(): SearchableDocuments; +} + +declare class SearchClient { + readonly multiSearch: MultiSearch; + private readonly configuration; + private readonly apiCall; + private readonly individualCollections; + constructor(options: ConfigurationOptions); + clearCache(): void; + collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; +} + interface OverrideSchema extends OverrideCreateSchema { id: string; } @@ -528,6 +610,7 @@ interface CollectionFieldSchema { stem?: boolean; num_dim?: number; store?: boolean; + range_index?: boolean; [t: string]: unknown; } interface CollectionSchema extends CollectionCreateSchema { @@ -542,6 +625,9 @@ interface CollectionDropFieldSchema { interface CollectionUpdateSchema extends Partial> { fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[]; } +interface CollectionDeleteOptions { + compact_store?: boolean; +} declare class Collection { private readonly name; private readonly apiCall; @@ -555,7 +641,7 @@ declare class Collection { constructor(name: string, apiCall: ApiCall, configuration: any); retrieve(): Promise; update(schema: CollectionUpdateSchema): Promise; - delete(): Promise; + delete(options?: CollectionDeleteOptions): Promise; exists(): Promise; documents(): Documents; documents(documentId: string): Document; @@ -626,6 +712,7 @@ interface KeyCreateSchema { value?: string; value_prefix?: string; expires_at?: number; + autodelete?: boolean; } interface KeyDeleteSchema { id: number; @@ -730,37 +817,7 @@ declare class Health { declare class Operations { private apiCall; constructor(apiCall: ApiCall); - perform(operationName: "vote" | "snapshot" | "cache/clear" | string, queryParameters?: Record): Promise; -} - -interface MultiSearchRequestSchema extends SearchParams { - collection?: string; - "x-typesense-api-key"?: string; -} -interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { - collection?: string; - "x-typesense-api-key"?: string; -} -interface MultiSearchRequestsSchema { - searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; -} -interface MultiSearchResponse { - results: { - [Index in keyof T]: SearchResponse; - } & { - length: T["length"]; - }; -} -declare class MultiSearch { - private apiCall; - private configuration; - private useTextContentType; - private requestWithCache; - constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); - clearCache(): void; - perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { - cacheSearchResultsForSeconds?: number; - }): Promise>; + perform(operationName: "vote" | "snapshot" | "cache/clear" | (string & {}), queryParameters?: Record): Promise; } interface PresetSchema extends PresetCreateSchema { @@ -796,6 +853,7 @@ declare class Presets { interface AnalyticsRuleCreateSchema { type: "popular_queries" | "nohits_queries" | "counter"; params: { + enable_auto_aggregation?: boolean; source: { collections: string[]; events?: Array<{ @@ -842,7 +900,7 @@ declare class AnalyticsRules { interface AnalyticsEventCreateSchema { type: string; name: string; - data?: object; + data: Record; } declare class AnalyticsEvents { @@ -859,7 +917,8 @@ declare class Analytics { private readonly individualAnalyticsRules; private readonly _analyticsEvents; constructor(apiCall: ApiCall); - rules(id?: string): AnalyticsRules | AnalyticsRule; + rules(): AnalyticsRules; + rules(id: string): AnalyticsRule; events(): AnalyticsEvents; static get RESOURCEPATH(): string; } @@ -1003,25 +1062,6 @@ declare class Client { conversations(id: string): Conversation; } -declare class SearchOnlyCollection { - private readonly name; - private readonly apiCall; - private readonly configuration; - private readonly _documents; - constructor(name: string, apiCall: ApiCall, configuration: any); - documents(): SearchableDocuments; -} - -declare class SearchClient { - readonly multiSearch: MultiSearch; - private readonly configuration; - private readonly apiCall; - private readonly individualCollections; - constructor(options: ConfigurationOptions); - clearCache(): void; - collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; -} - declare class HTTPError extends TypesenseError { } @@ -1046,39 +1086,40 @@ declare class RequestUnauthorized extends TypesenseError { declare class ServerError extends TypesenseError { } +interface ImportErrorPayload { + documentsInJSONLFormat: string | ReadStream$1; + options: DocumentImportParameters; + failedItems: ImportResponse[]; + successCount: number; +} declare class ImportError extends TypesenseError { + payload: ImportErrorPayload; importResults: ImportResponse[]; - constructor(message: string, importResults: ImportResponse[]); + constructor(message: string, importResults: ImportResponse[], payload: ImportErrorPayload); } -type Errors_HTTPError = HTTPError; -declare const Errors_HTTPError: typeof HTTPError; -type Errors_ImportError = ImportError; -declare const Errors_ImportError: typeof ImportError; -type Errors_MissingConfigurationError = MissingConfigurationError; -declare const Errors_MissingConfigurationError: typeof MissingConfigurationError; -type Errors_ObjectAlreadyExists = ObjectAlreadyExists; -declare const Errors_ObjectAlreadyExists: typeof ObjectAlreadyExists; -type Errors_ObjectNotFound = ObjectNotFound; -declare const Errors_ObjectNotFound: typeof ObjectNotFound; -type Errors_ObjectUnprocessable = ObjectUnprocessable; -declare const Errors_ObjectUnprocessable: typeof ObjectUnprocessable; -type Errors_RequestMalformed = RequestMalformed; -declare const Errors_RequestMalformed: typeof RequestMalformed; -type Errors_RequestUnauthorized = RequestUnauthorized; -declare const Errors_RequestUnauthorized: typeof RequestUnauthorized; -type Errors_ServerError = ServerError; -declare const Errors_ServerError: typeof ServerError; -type Errors_TypesenseError = TypesenseError; -declare const Errors_TypesenseError: typeof TypesenseError; -declare namespace Errors { - export { Errors_HTTPError as HTTPError, Errors_ImportError as ImportError, Errors_MissingConfigurationError as MissingConfigurationError, Errors_ObjectAlreadyExists as ObjectAlreadyExists, Errors_ObjectNotFound as ObjectNotFound, Errors_ObjectUnprocessable as ObjectUnprocessable, Errors_RequestMalformed as RequestMalformed, Errors_RequestUnauthorized as RequestUnauthorized, Errors_ServerError as ServerError, Errors_TypesenseError as TypesenseError }; +type index_HTTPError = HTTPError; +declare const index_HTTPError: typeof HTTPError; +type index_ImportError = ImportError; +declare const index_ImportError: typeof ImportError; +type index_MissingConfigurationError = MissingConfigurationError; +declare const index_MissingConfigurationError: typeof MissingConfigurationError; +type index_ObjectAlreadyExists = ObjectAlreadyExists; +declare const index_ObjectAlreadyExists: typeof ObjectAlreadyExists; +type index_ObjectNotFound = ObjectNotFound; +declare const index_ObjectNotFound: typeof ObjectNotFound; +type index_ObjectUnprocessable = ObjectUnprocessable; +declare const index_ObjectUnprocessable: typeof ObjectUnprocessable; +type index_RequestMalformed = RequestMalformed; +declare const index_RequestMalformed: typeof RequestMalformed; +type index_RequestUnauthorized = RequestUnauthorized; +declare const index_RequestUnauthorized: typeof RequestUnauthorized; +type index_ServerError = ServerError; +declare const index_ServerError: typeof ServerError; +type index_TypesenseError = TypesenseError; +declare const index_TypesenseError: typeof TypesenseError; +declare namespace index { + export { index_HTTPError as HTTPError, index_ImportError as ImportError, index_MissingConfigurationError as MissingConfigurationError, index_ObjectAlreadyExists as ObjectAlreadyExists, index_ObjectNotFound as ObjectNotFound, index_ObjectUnprocessable as ObjectUnprocessable, index_RequestMalformed as RequestMalformed, index_RequestUnauthorized as RequestUnauthorized, index_ServerError as ServerError, index_TypesenseError as TypesenseError }; } -declare const _default: { - Client: typeof Client; - SearchClient: typeof SearchClient; - Errors: typeof Errors; -}; - -export { Client, Errors, SearchClient, _default as default }; +export { type AnalyticsEventCreateSchema, type AnalyticsRuleCreateSchema, type AnalyticsRuleDeleteSchema, type AnalyticsRuleSchema, type AnalyticsRulesRetrieveSchema, type ArraybleParams, Client, type CollectionAliasCreateSchema, type CollectionAliasSchema, type CollectionAliasesResponseSchema, type CollectionCreateOptions, type CollectionCreateSchema, type CollectionDeleteOptions, type CollectionDropFieldSchema, type CollectionFieldSchema, type CollectionSchema, type CollectionUpdateSchema, type CollectionsRetrieveOptions, type ConfigurationOptions, type ConversationDeleteSchema, type ConversationModelCreateSchema, type ConversationModelDeleteSchema, type ConversationModelSchema, type ConversationSchema, type ConversationUpdateSchema, type ConversationsRetrieveSchema, type DebugResponseSchema, type DeleteQuery, type DeleteResponse, type DocumentImportParameters, type DocumentSchema, type DocumentWriteParameters, type DocumentsExportParameters, type DropTokensMode, type EndpointStats, index as Errors, type ExtractBaseTypes, type FieldType, type GenerateScopedSearchKeyParams, type HealthResponse, type ImportResponse, type ImportResponseFail, type KeyCreateSchema, type KeyDeleteSchema, type KeySchema, type KeysRetrieveSchema, type MetricsResponse, type MultiSearchRequestSchema, type MultiSearchRequestWithPresetSchema, type MultiSearchRequestsSchema, type MultiSearchResponse, type NodeConfiguration, type NodeConfigurationWithHostname, type NodeConfigurationWithUrl, type OperationMode, type OverrideCreateSchema, type OverrideDeleteSchema, type OverrideRuleFilterSchema, type OverrideRuleQuerySchema, type OverrideRuleTagsSchema, type OverrideSchema, type OverridesRetrieveSchema, type PresetCreateSchema, type PresetDeleteSchema, type PresetSchema, type PresetsRetrieveSchema, SearchClient, type SearchOptions, type SearchParams, type SearchParamsWithPreset, type SearchResponse, type SearchResponseFacetCountSchema, type SearchResponseHighlight, type SearchResponseHit, type SearchResponseRequestParams, type SearchableDocuments, type StatsResponse, type StopwordCreateSchema, type StopwordDeleteSchema, type StopwordSchema, type StopwordsRetrieveSchema, type SynonymCreateSchema, type SynonymDeleteSchema, type SynonymSchema, type SynonymsRetrieveSchema, type UnionArrayKeys, type UnionArraySearchParams, type UpdateByFilterParameters, type UpdateByFilterResponse, type WriteableDocuments, arrayableParams }; diff --git a/dist/Typesense.d.ts b/dist/Typesense.d.ts index de2d2e73..9814771e 100644 --- a/dist/Typesense.d.ts +++ b/dist/Typesense.d.ts @@ -3,6 +3,7 @@ import { Agent } from 'http'; import { Agent as Agent$1 } from 'https'; import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; import { ReadStream } from 'fs'; +import { ReadStream as ReadStream$1 } from 'node:fs'; interface NodeConfiguration { host: string; @@ -76,6 +77,17 @@ interface ConfigurationOptions { * @type {any} */ paramsSerializer?: any; + /** + * Set a custom axios adapter + * + * Useful for customizing the underlying HTTP client library used by Typesense. + * + * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge. + * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161 + * + * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config + */ + axiosAdapter?: AxiosRequestConfig["adapter"]; } declare class Configuration { readonly nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; @@ -94,6 +106,7 @@ declare class Configuration { readonly httpAgent?: Agent; readonly httpsAgent?: Agent$1; readonly paramsSerializer?: any; + readonly axiosAdapter?: AxiosRequestConfig["adapter"]; constructor(options: ConfigurationOptions); validate(): boolean; private validateNodes; @@ -106,7 +119,8 @@ declare class Configuration { declare class TypesenseError extends Error { httpStatus?: number; - constructor(message?: string); + httpBody?: string; + constructor(message?: string, httpBody?: string, httpStatus?: number); } interface Node extends NodeConfiguration { @@ -135,6 +149,7 @@ declare class ApiCall { post(endpoint: string, bodyParameters?: any, queryParameters?: any, additionalHeaders?: any): Promise; put(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; patch(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + private getAdapter; performRequest(requestType: Method, endpoint: string, { queryParameters, bodyParameters, additionalHeaders, abortSignal, responseType, skipConnectionTimeout, enableKeepAlive, }: { queryParameters?: any; bodyParameters?: any; @@ -151,7 +166,7 @@ declare class ApiCall { uriFor(endpoint: string, node: any): string; defaultHeaders(): any; timer(seconds: any): Promise; - customErrorForResponse(response: AxiosResponse, messageFromServer: string): TypesenseError; + customErrorForResponse(response: AxiosResponse, messageFromServer: string, httpBody?: string): TypesenseError; } declare class RequestWithCache { @@ -199,13 +214,28 @@ type DocumentSchema = Record; interface SearchParamsWithPreset extends Partial { preset: string; } +type DropTokensMode = "right_to_left" | "left_to_right" | "both_sides:3"; type OperationMode = "off" | "always" | "fallback"; +type UnionArrayKeys = { + [K in keyof T]: T[K] extends undefined ? never : NonNullable extends infer R ? R extends R[] ? never : R extends (infer U)[] | infer U ? U[] extends R ? K : never : never : never; +}[keyof T] & keyof T; +type UnionArraySearchParams = UnionArrayKeys; +type ArraybleParams = { + readonly [K in UnionArraySearchParams]: string; +}; +type ExtractBaseTypes = { + [K in keyof T]: K extends UnionArrayKeys ? T[K] extends (infer U)[] | infer U ? U : T[K] : T[K]; +}; +declare const arrayableParams: ArraybleParams; interface SearchParams { - q?: string; + q?: "*" | (string & {}); query_by?: string | string[]; query_by_weights?: string | number[]; prefix?: string | boolean | boolean[]; filter_by?: string; + enable_synonyms?: boolean; + enable_analytics?: boolean; + filter_curated_hits?: boolean; enable_lazy_filter?: boolean; sort_by?: string | string[]; facet_by?: string | string[]; @@ -215,6 +245,7 @@ interface SearchParams { facet_query?: string; facet_query_num_typos?: number; facet_return_parent?: string; + facet_strategy?: "exhaustive" | "top_values" | "automatic"; page?: number; per_page?: number; group_by?: string | string[]; @@ -235,12 +266,14 @@ interface SearchParams { split_join_tokens?: OperationMode; exhaustive_search?: boolean; drop_tokens_threshold?: number; + drop_tokens_mode?: DropTokensMode; typo_tokens_threshold?: number; pinned_hits?: string | string[]; hidden_hits?: string | string[]; limit_hits?: number; pre_segmented_query?: boolean; enable_overrides?: boolean; + override_tags?: string | string[]; prioritize_exact_match?: boolean; prioritize_token_position?: boolean; prioritize_num_matching_fields?: boolean; @@ -285,10 +318,10 @@ interface SearchResponseHit { document: T; text_match: number; text_match_info?: { - best_field_score: string; + best_field_score: `${number}`; best_field_weight: number; fields_matched: number; - score: string; + score: `${number}`; tokens_matched: number; }; } @@ -411,6 +444,55 @@ declare class Documents extends SearchOnlyDoc exportStream(options?: DocumentsExportParameters): Promise; } +interface MultiSearchRequestSchema extends SearchParams { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestsSchema { + searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; +} +interface MultiSearchResponse { + results: { + [Index in keyof T]: SearchResponse; + } & { + length: T["length"]; + }; +} +declare class MultiSearch { + private apiCall; + private configuration; + private useTextContentType; + private requestWithCache; + constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); + clearCache(): void; + perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { + cacheSearchResultsForSeconds?: number; + }): Promise>; +} + +declare class SearchOnlyCollection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + constructor(name: string, apiCall: ApiCall, configuration: any); + documents(): SearchableDocuments; +} + +declare class SearchClient { + readonly multiSearch: MultiSearch; + private readonly configuration; + private readonly apiCall; + private readonly individualCollections; + constructor(options: ConfigurationOptions); + clearCache(): void; + collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; +} + interface OverrideSchema extends OverrideCreateSchema { id: string; } @@ -528,6 +610,7 @@ interface CollectionFieldSchema { stem?: boolean; num_dim?: number; store?: boolean; + range_index?: boolean; [t: string]: unknown; } interface CollectionSchema extends CollectionCreateSchema { @@ -542,6 +625,9 @@ interface CollectionDropFieldSchema { interface CollectionUpdateSchema extends Partial> { fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[]; } +interface CollectionDeleteOptions { + compact_store?: boolean; +} declare class Collection { private readonly name; private readonly apiCall; @@ -555,7 +641,7 @@ declare class Collection { constructor(name: string, apiCall: ApiCall, configuration: any); retrieve(): Promise; update(schema: CollectionUpdateSchema): Promise; - delete(): Promise; + delete(options?: CollectionDeleteOptions): Promise; exists(): Promise; documents(): Documents; documents(documentId: string): Document; @@ -626,6 +712,7 @@ interface KeyCreateSchema { value?: string; value_prefix?: string; expires_at?: number; + autodelete?: boolean; } interface KeyDeleteSchema { id: number; @@ -730,37 +817,7 @@ declare class Health { declare class Operations { private apiCall; constructor(apiCall: ApiCall); - perform(operationName: "vote" | "snapshot" | "cache/clear" | string, queryParameters?: Record): Promise; -} - -interface MultiSearchRequestSchema extends SearchParams { - collection?: string; - "x-typesense-api-key"?: string; -} -interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { - collection?: string; - "x-typesense-api-key"?: string; -} -interface MultiSearchRequestsSchema { - searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; -} -interface MultiSearchResponse { - results: { - [Index in keyof T]: SearchResponse; - } & { - length: T["length"]; - }; -} -declare class MultiSearch { - private apiCall; - private configuration; - private useTextContentType; - private requestWithCache; - constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); - clearCache(): void; - perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { - cacheSearchResultsForSeconds?: number; - }): Promise>; + perform(operationName: "vote" | "snapshot" | "cache/clear" | (string & {}), queryParameters?: Record): Promise; } interface PresetSchema extends PresetCreateSchema { @@ -796,6 +853,7 @@ declare class Presets { interface AnalyticsRuleCreateSchema { type: "popular_queries" | "nohits_queries" | "counter"; params: { + enable_auto_aggregation?: boolean; source: { collections: string[]; events?: Array<{ @@ -842,7 +900,7 @@ declare class AnalyticsRules { interface AnalyticsEventCreateSchema { type: string; name: string; - data?: object; + data: Record; } declare class AnalyticsEvents { @@ -859,7 +917,8 @@ declare class Analytics { private readonly individualAnalyticsRules; private readonly _analyticsEvents; constructor(apiCall: ApiCall); - rules(id?: string): AnalyticsRules | AnalyticsRule; + rules(): AnalyticsRules; + rules(id: string): AnalyticsRule; events(): AnalyticsEvents; static get RESOURCEPATH(): string; } @@ -1003,25 +1062,6 @@ declare class Client { conversations(id: string): Conversation; } -declare class SearchOnlyCollection { - private readonly name; - private readonly apiCall; - private readonly configuration; - private readonly _documents; - constructor(name: string, apiCall: ApiCall, configuration: any); - documents(): SearchableDocuments; -} - -declare class SearchClient { - readonly multiSearch: MultiSearch; - private readonly configuration; - private readonly apiCall; - private readonly individualCollections; - constructor(options: ConfigurationOptions); - clearCache(): void; - collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; -} - declare class HTTPError extends TypesenseError { } @@ -1046,39 +1086,40 @@ declare class RequestUnauthorized extends TypesenseError { declare class ServerError extends TypesenseError { } +interface ImportErrorPayload { + documentsInJSONLFormat: string | ReadStream$1; + options: DocumentImportParameters; + failedItems: ImportResponse[]; + successCount: number; +} declare class ImportError extends TypesenseError { + payload: ImportErrorPayload; importResults: ImportResponse[]; - constructor(message: string, importResults: ImportResponse[]); + constructor(message: string, importResults: ImportResponse[], payload: ImportErrorPayload); } -type Errors_HTTPError = HTTPError; -declare const Errors_HTTPError: typeof HTTPError; -type Errors_ImportError = ImportError; -declare const Errors_ImportError: typeof ImportError; -type Errors_MissingConfigurationError = MissingConfigurationError; -declare const Errors_MissingConfigurationError: typeof MissingConfigurationError; -type Errors_ObjectAlreadyExists = ObjectAlreadyExists; -declare const Errors_ObjectAlreadyExists: typeof ObjectAlreadyExists; -type Errors_ObjectNotFound = ObjectNotFound; -declare const Errors_ObjectNotFound: typeof ObjectNotFound; -type Errors_ObjectUnprocessable = ObjectUnprocessable; -declare const Errors_ObjectUnprocessable: typeof ObjectUnprocessable; -type Errors_RequestMalformed = RequestMalformed; -declare const Errors_RequestMalformed: typeof RequestMalformed; -type Errors_RequestUnauthorized = RequestUnauthorized; -declare const Errors_RequestUnauthorized: typeof RequestUnauthorized; -type Errors_ServerError = ServerError; -declare const Errors_ServerError: typeof ServerError; -type Errors_TypesenseError = TypesenseError; -declare const Errors_TypesenseError: typeof TypesenseError; -declare namespace Errors { - export { Errors_HTTPError as HTTPError, Errors_ImportError as ImportError, Errors_MissingConfigurationError as MissingConfigurationError, Errors_ObjectAlreadyExists as ObjectAlreadyExists, Errors_ObjectNotFound as ObjectNotFound, Errors_ObjectUnprocessable as ObjectUnprocessable, Errors_RequestMalformed as RequestMalformed, Errors_RequestUnauthorized as RequestUnauthorized, Errors_ServerError as ServerError, Errors_TypesenseError as TypesenseError }; +type index_HTTPError = HTTPError; +declare const index_HTTPError: typeof HTTPError; +type index_ImportError = ImportError; +declare const index_ImportError: typeof ImportError; +type index_MissingConfigurationError = MissingConfigurationError; +declare const index_MissingConfigurationError: typeof MissingConfigurationError; +type index_ObjectAlreadyExists = ObjectAlreadyExists; +declare const index_ObjectAlreadyExists: typeof ObjectAlreadyExists; +type index_ObjectNotFound = ObjectNotFound; +declare const index_ObjectNotFound: typeof ObjectNotFound; +type index_ObjectUnprocessable = ObjectUnprocessable; +declare const index_ObjectUnprocessable: typeof ObjectUnprocessable; +type index_RequestMalformed = RequestMalformed; +declare const index_RequestMalformed: typeof RequestMalformed; +type index_RequestUnauthorized = RequestUnauthorized; +declare const index_RequestUnauthorized: typeof RequestUnauthorized; +type index_ServerError = ServerError; +declare const index_ServerError: typeof ServerError; +type index_TypesenseError = TypesenseError; +declare const index_TypesenseError: typeof TypesenseError; +declare namespace index { + export { index_HTTPError as HTTPError, index_ImportError as ImportError, index_MissingConfigurationError as MissingConfigurationError, index_ObjectAlreadyExists as ObjectAlreadyExists, index_ObjectNotFound as ObjectNotFound, index_ObjectUnprocessable as ObjectUnprocessable, index_RequestMalformed as RequestMalformed, index_RequestUnauthorized as RequestUnauthorized, index_ServerError as ServerError, index_TypesenseError as TypesenseError }; } -declare const _default: { - Client: typeof Client; - SearchClient: typeof SearchClient; - Errors: typeof Errors; -}; - -export { Client, Errors, SearchClient, _default as default }; +export { type AnalyticsEventCreateSchema, type AnalyticsRuleCreateSchema, type AnalyticsRuleDeleteSchema, type AnalyticsRuleSchema, type AnalyticsRulesRetrieveSchema, type ArraybleParams, Client, type CollectionAliasCreateSchema, type CollectionAliasSchema, type CollectionAliasesResponseSchema, type CollectionCreateOptions, type CollectionCreateSchema, type CollectionDeleteOptions, type CollectionDropFieldSchema, type CollectionFieldSchema, type CollectionSchema, type CollectionUpdateSchema, type CollectionsRetrieveOptions, type ConfigurationOptions, type ConversationDeleteSchema, type ConversationModelCreateSchema, type ConversationModelDeleteSchema, type ConversationModelSchema, type ConversationSchema, type ConversationUpdateSchema, type ConversationsRetrieveSchema, type DebugResponseSchema, type DeleteQuery, type DeleteResponse, type DocumentImportParameters, type DocumentSchema, type DocumentWriteParameters, type DocumentsExportParameters, type DropTokensMode, type EndpointStats, index as Errors, type ExtractBaseTypes, type FieldType, type GenerateScopedSearchKeyParams, type HealthResponse, type ImportResponse, type ImportResponseFail, type KeyCreateSchema, type KeyDeleteSchema, type KeySchema, type KeysRetrieveSchema, type MetricsResponse, type MultiSearchRequestSchema, type MultiSearchRequestWithPresetSchema, type MultiSearchRequestsSchema, type MultiSearchResponse, type NodeConfiguration, type NodeConfigurationWithHostname, type NodeConfigurationWithUrl, type OperationMode, type OverrideCreateSchema, type OverrideDeleteSchema, type OverrideRuleFilterSchema, type OverrideRuleQuerySchema, type OverrideRuleTagsSchema, type OverrideSchema, type OverridesRetrieveSchema, type PresetCreateSchema, type PresetDeleteSchema, type PresetSchema, type PresetsRetrieveSchema, SearchClient, type SearchOptions, type SearchParams, type SearchParamsWithPreset, type SearchResponse, type SearchResponseFacetCountSchema, type SearchResponseHighlight, type SearchResponseHit, type SearchResponseRequestParams, type SearchableDocuments, type StatsResponse, type StopwordCreateSchema, type StopwordDeleteSchema, type StopwordSchema, type StopwordsRetrieveSchema, type SynonymCreateSchema, type SynonymDeleteSchema, type SynonymSchema, type SynonymsRetrieveSchema, type UnionArrayKeys, type UnionArraySearchParams, type UpdateByFilterParameters, type UpdateByFilterResponse, type WriteableDocuments, arrayableParams }; diff --git a/dist/Typesense.min.js b/dist/Typesense.min.js index b00e14d2..d054c090 100644 --- a/dist/Typesense.min.js +++ b/dist/Typesense.min.js @@ -1,9 +1,9 @@ -"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel);var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||_loglevel2.default,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var _http = require('http');var _https = require('https');var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new (0, _http.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new (0, _https.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=_axios2.default.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await _axios2.default.call(void 0, l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,_optionalChain([m, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message])));throw this.customErrorForResponse(m,_optionalChain([m, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]))}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(_optionalChain([l, 'access', _6 => _6.response, 'optionalAccess', _7 => _7.data]))}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var Ke=Object.create;var fe=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var ye=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ze=(r,e)=>{for(var t in e)fe(r,t,{get:e[t],enumerable:!0})},Le=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of We(e))!je.call(r,s)&&s!==t&&fe(r,s,{get:()=>e[s],enumerable:!(i=Me(e,s))||i.enumerable});return r};var ge=(r,e,t)=>(t=r!=null?Ke(Fe(r)):{},Le(e||!r||!r.__esModule?fe(t,"default",{value:r,enumerable:!0}):t,r));var _e=ye((jt,xe)=>{"use strict";xe.exports={}});var be=ye((zt,Ae)=>{"use strict";Ae.exports={}});var $e=ye((Yr,He)=>{"use strict";He.exports={}});var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel);var Re={};ze(Re,{HTTPError:()=>R,ImportError:()=>g,MissingConfigurationError:()=>f,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>y,ObjectUnprocessable:()=>_,RequestMalformed:()=>A,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype)}};var R=class extends l{};var f=class extends l{};var x=class extends l{};var y=class extends l{};var _=class extends l{};var A=class extends l{};var b=class extends l{};var T=class extends l{};var g=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==void 0&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||_loglevel2.default,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new f("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new f("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new f("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}};var Ee=ge(_e()),we=ge(be());var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var Je="X-TYPESENSE-API-KEY",Ce=!0,Be=!1,Te=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:i=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},s={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:s})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?_axios2.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis):_axios2.default.getAdapter(this.configuration.axiosAdapter):void 0}async performRequest(e,t,{queryParameters:i=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:a=null,responseType:h=void 0,skipConnectionTimeout:m=!1,enableKeepAlive:C=void 0}){this.configuration.validate();let c=Date.now(),S,F=!1;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:j=>j>0,transformResponse:[(j,z)=>{let Pe=j;return z!==void 0&&typeof j=="string"&&z["content-type"]&&z["content-type"].startsWith("application/json")&&(Pe=JSON.parse(j)),Pe}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new Ee.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new we.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(o.data=s),a){let z=_axios2.default.CancelToken.source();Q=()=>{F=!0,z.cancel()},a.addEventListener("abort",Q),o.cancelToken=z.token}let d=await _axios2.default.call(void 0, o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Ce),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,_optionalChain([d, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message]),o.data));throw this.customErrorForResponse(d,_optionalChain([d, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]),o.data)}catch(o){if(F||this.setNodeHealthcheck(P,Be),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${_nullishCoalesce(_optionalChain([o, 'optionalAccess', _6 => _6.code]), () => (""))} ${o.message}${o.response==null?"":" - "+JSON.stringify(_optionalChain([o, 'access', _7 => _7.response, 'optionalAccess', _8 => _8.data]))}"`),F)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Ce)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Ce)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Je]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let s=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(s+=` | Server said: ${t}`);let n=new l(s,i,e.status);return e.status===400?n=new A(s):e.status===401?n=new b(s):e.status===404?n=new y(s):e.status===409?n=new x(s):e.status===422?n=new _(s):e.status>=500&&e.status<=599?n=new T(s):n=new R(s),n}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,i,s){let{cacheResponseForSeconds:n=120,maxSize:a=100}=s;if(n<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o)}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o)}return v}};var Se="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(Se,e,t)}async retrieve(e={}){return this.apiCall.get(Se,e)}static get RESOURCEPATH(){return Se}};var Oe="/documents",L=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);let n=u(e),a=Object.assign({},s,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Oe}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var ve={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},Ne=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,N=class extends L{constructor(e,t,i){super(e,t,i)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(n=>JSON.stringify(n)).join(` `)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object - Please try reducing the number of keys in your document, or using CURL to import your data. - `):new Error(n)}else r=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se});if(Array.isArray(e)){let n=s.split(` -`).map(I=>JSON.parse(I)),o=n.filter(I=>I.success===!1);if(o.length>0)throw new f(`${n.length-o.length} documents imported successfully, ${o.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n);return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se})).split(` -`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};var _crypto = require('crypto');var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(_crypto.createHmac.call(void 0, "sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var $i={Client:le,SearchClient:ce,Errors:he};exports.Client = le; exports.Errors = he; exports.SearchClient = ce; exports.default = $i; + Please try reducing the number of keys in your document, or using CURL to import your data. + `):new Error(n)}else i=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne});if(Array.isArray(e)){let n=s.split(` +`).map(h=>JSON.parse(h)),a=n.filter(h=>h.success===!1);if(a.length>0)throw new g(`${n.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:n.length-a.length});return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne})).split(` +`).map(a=>JSON.parse(a)),n=s.filter(a=>a.success===!1);if(n.length>0)throw new g(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:e,options:t,failedItems:n,successCount:s.length-n.length});return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function De(r){return Object.keys(ve).filter(e=>r[e]!==void 0).every(e=>Ve(r[e]))}function u(r){let e={...r};if(!Object.keys(ve).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&De(e))return e;if(!De(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Ve(r){return!Array.isArray(r)}var Ye="/multi_search",D=class{constructor(e,t,i=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let a={...t,...n},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ye,h,m,s],{cacheResponseForSeconds:i})}};var me=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new L(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var de=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Ge="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ge}};var J=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var Xe="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Xe}};var B=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var he=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${N.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var V=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new N(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof y)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new he(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new J(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new B(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ue="/aliases",$=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(Ue)}endpointPath(e){return`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ue}};var Y=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ie=ge($e());var qe="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(qe)}generateScopedSearchKey(e,t){let i=u(t),s=JSON.stringify(i),n=Buffer.from((0,Ie.createHmac)("sha256",e).update(s).digest("base64")),a=e.substr(0,4),h=`${n}${a}${s}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var Ze="/debug",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ze)}};var et="/metrics.json",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(et)}};var tt="/stats.json",ee=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(tt)}};var rt="/health",te=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(rt)}};var it="/operations",re=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${it}/${e}`,{},t)}};var st="/presets",I=class r{constructor(e){this.apiCall=e}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let s=t.value.searches.map(n=>u(n));return this.apiCall.put(this.endpointPath(e),{value:{searches:s}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return st}};var ie=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var nt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return nt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ot="/analytics/events",ne=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ot}};var at="/analytics",oe=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new ne(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return at}};var lt="/stopwords",K=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var ae=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var ct="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var le=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ke="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall)}async retrieve(){return this.apiCall.get(ke)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new le(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return ke}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ue=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new X(this.apiCall),this.metrics=new Z(this.apiCall),this.stats=new ee(this.apiCall),this.health=new te(this.apiCall),this.operations=new re(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new oe(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new V(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new Y(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new G(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new ie(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ae(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ce(e,this.apiCall)),this.individualConversations[e])}};exports.Client = ue; exports.Errors = Re; exports.SearchClient = de; //# sourceMappingURL=Typesense.min.js.map \ No newline at end of file diff --git a/dist/Typesense.min.js.map b/dist/Typesense.min.js.map index 0c31d124..810ec55d 100644 --- a/dist/Typesense.min.js.map +++ b/dist/Typesense.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["/home/fanis/code/typesense/typesense-js/dist/Typesense.min.js","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/MultiSearch.ts"],"names":["Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","importResults","Configuration","options","node","logger","key","array","i","j","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException"],"mappings":"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","file":"/home/fanis/code/typesense/typesense-js/dist/Typesense.min.js","sourcesContent":[null,"import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["/home/fanis/code/typesense/js-lib/dist/Typesense.min.js","node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/Alias.ts"],"names":["require_http","__commonJSMin","exports","module","require_https","require_crypto","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","httpBody","httpStatus","importResults","payload","Configuration","options","node","logger","key","array","i","j","import_http","import_https","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted"],"mappings":"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","file":"/home/fanis/code/typesense/js-lib/dist/Typesense.min.js","sourcesContent":[null,"module.exports = {}","module.exports = {}","module.exports = {}","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n"]} \ No newline at end of file diff --git a/dist/Typesense.min.mjs b/dist/Typesense.min.mjs index e73d15fa..c303ec55 100644 --- a/dist/Typesense.min.mjs +++ b/dist/Typesense.min.mjs @@ -1,9 +1,9 @@ -var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};import be from"loglevel";var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||be,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};import fe from"axios";import{Agent as xe}from"http";import{Agent as Te}from"https";var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new xe({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new Te({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=fe.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await fe(l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,m.data?.message));throw this.customErrorForResponse(m,m.data?.message)}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(l.response?.data)}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` +var Ke=Object.create;var fe=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var ye=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ze=(r,e)=>{for(var t in e)fe(r,t,{get:e[t],enumerable:!0})},Le=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of We(e))!je.call(r,s)&&s!==t&&fe(r,s,{get:()=>e[s],enumerable:!(i=Me(e,s))||i.enumerable});return r};var ge=(r,e,t)=>(t=r!=null?Ke(Fe(r)):{},Le(e||!r||!r.__esModule?fe(t,"default",{value:r,enumerable:!0}):t,r));var _e=ye((jt,xe)=>{"use strict";xe.exports={}});var be=ye((zt,Ae)=>{"use strict";Ae.exports={}});var $e=ye((Yr,He)=>{"use strict";He.exports={}});import Qe from"loglevel";var Re={};ze(Re,{HTTPError:()=>R,ImportError:()=>g,MissingConfigurationError:()=>f,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>y,ObjectUnprocessable:()=>_,RequestMalformed:()=>A,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype)}};var R=class extends l{};var f=class extends l{};var x=class extends l{};var y=class extends l{};var _=class extends l{};var A=class extends l{};var b=class extends l{};var T=class extends l{};var g=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==void 0&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||Qe,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new f("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new f("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new f("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}};var Ee=ge(_e()),we=ge(be());import pe from"axios";var Je="X-TYPESENSE-API-KEY",Ce=!0,Be=!1,Te=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:i=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},s={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:s})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?pe.getAdapter(this.configuration.axiosAdapter).bind(globalThis):pe.getAdapter(this.configuration.axiosAdapter):void 0}async performRequest(e,t,{queryParameters:i=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:a=null,responseType:h=void 0,skipConnectionTimeout:m=!1,enableKeepAlive:C=void 0}){this.configuration.validate();let c=Date.now(),S,F=!1;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:j=>j>0,transformResponse:[(j,z)=>{let Pe=j;return z!==void 0&&typeof j=="string"&&z["content-type"]&&z["content-type"].startsWith("application/json")&&(Pe=JSON.parse(j)),Pe}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new Ee.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new we.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(o.data=s),a){let z=pe.CancelToken.source();Q=()=>{F=!0,z.cancel()},a.addEventListener("abort",Q),o.cancelToken=z.token}let d=await pe(o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Ce),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,d.data?.message,o.data));throw this.customErrorForResponse(d,d.data?.message,o.data)}catch(o){if(F||this.setNodeHealthcheck(P,Be),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${o?.code??""} ${o.message}${o.response==null?"":" - "+JSON.stringify(o.response?.data)}"`),F)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Ce)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Ce)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Je]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let s=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(s+=` | Server said: ${t}`);let n=new l(s,i,e.status);return e.status===400?n=new A(s):e.status===401?n=new b(s):e.status===404?n=new y(s):e.status===409?n=new x(s):e.status===422?n=new _(s):e.status>=500&&e.status<=599?n=new T(s):n=new R(s),n}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,i,s){let{cacheResponseForSeconds:n=120,maxSize:a=100}=s;if(n<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o)}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o)}return v}};var Se="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(Se,e,t)}async retrieve(e={}){return this.apiCall.get(Se,e)}static get RESOURCEPATH(){return Se}};var Oe="/documents",L=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);let n=u(e),a=Object.assign({},s,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Oe}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var ve={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},Ne=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,N=class extends L{constructor(e,t,i){super(e,t,i)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(n=>JSON.stringify(n)).join(` `)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object - Please try reducing the number of keys in your document, or using CURL to import your data. - `):new Error(n)}else r=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se});if(Array.isArray(e)){let n=s.split(` -`).map(I=>JSON.parse(I)),o=n.filter(I=>I.success===!1);if(o.length>0)throw new f(`${n.length-o.length} documents imported successfully, ${o.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n);return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se})).split(` -`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};import{createHmac as He}from"crypto";var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(He("sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var $i={Client:le,SearchClient:ce,Errors:he};export{le as Client,he as Errors,ce as SearchClient,$i as default}; + Please try reducing the number of keys in your document, or using CURL to import your data. + `):new Error(n)}else i=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne});if(Array.isArray(e)){let n=s.split(` +`).map(h=>JSON.parse(h)),a=n.filter(h=>h.success===!1);if(a.length>0)throw new g(`${n.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:n.length-a.length});return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne})).split(` +`).map(a=>JSON.parse(a)),n=s.filter(a=>a.success===!1);if(n.length>0)throw new g(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:e,options:t,failedItems:n,successCount:s.length-n.length});return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function De(r){return Object.keys(ve).filter(e=>r[e]!==void 0).every(e=>Ve(r[e]))}function u(r){let e={...r};if(!Object.keys(ve).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&De(e))return e;if(!De(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Ve(r){return!Array.isArray(r)}var Ye="/multi_search",D=class{constructor(e,t,i=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let a={...t,...n},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ye,h,m,s],{cacheResponseForSeconds:i})}};var me=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new L(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var de=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Ge="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ge}};var J=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var Xe="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Xe}};var B=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var he=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${N.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var V=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new N(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof y)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new he(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new J(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new B(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ue="/aliases",$=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(Ue)}endpointPath(e){return`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ue}};var Y=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ie=ge($e());var qe="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(qe)}generateScopedSearchKey(e,t){let i=u(t),s=JSON.stringify(i),n=Buffer.from((0,Ie.createHmac)("sha256",e).update(s).digest("base64")),a=e.substr(0,4),h=`${n}${a}${s}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var Ze="/debug",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ze)}};var et="/metrics.json",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(et)}};var tt="/stats.json",ee=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(tt)}};var rt="/health",te=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(rt)}};var it="/operations",re=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${it}/${e}`,{},t)}};var st="/presets",I=class r{constructor(e){this.apiCall=e}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let s=t.value.searches.map(n=>u(n));return this.apiCall.put(this.endpointPath(e),{value:{searches:s}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return st}};var ie=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var nt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return nt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ot="/analytics/events",ne=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ot}};var at="/analytics",oe=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new ne(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return at}};var lt="/stopwords",K=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var ae=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var ct="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var le=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ke="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall)}async retrieve(){return this.apiCall.get(ke)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new le(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return ke}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ue=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new X(this.apiCall),this.metrics=new Z(this.apiCall),this.stats=new ee(this.apiCall),this.health=new te(this.apiCall),this.operations=new re(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new oe(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new V(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new Y(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new G(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new ie(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ae(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ce(e,this.apiCall)),this.individualConversations[e])}};export{ue as Client,Re as Errors,de as SearchClient}; //# sourceMappingURL=Typesense.min.mjs.map \ No newline at end of file diff --git a/dist/Typesense.min.mjs.map b/dist/Typesense.min.mjs.map index bbe62e0b..9f18da6b 100644 --- a/dist/Typesense.min.mjs.map +++ b/dist/Typesense.min.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Collections.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/Client.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense.ts"],"sourcesContent":["import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n this.responseCache.delete(oldestEntry);\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n this.responsePromiseCache.delete(oldestEntry);\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n for (const key in searchParameters) {\n if (Array.isArray(searchParameters[key])) {\n additionalQueryParams[key] = searchParameters[key].join(\",\");\n }\n }\n const queryParams = Object.assign(\n {},\n searchParameters,\n additionalQueryParams\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Overrides.RESOURCEPATH}/${this.overrideId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Synonyms.RESOURCEPATH}/${this.synonymId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Documents.RESOURCEPATH}/${this.documentId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${aliasName}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${this.name}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const paramsJSON = JSON.stringify(parameters);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(private id: number, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | string,\n queryParameters: Record = {}\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema\n ): Promise {\n return this.apiCall.put(this.endpointPath(presetId), params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${this.presetId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${this.stopwordId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${this.id}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import Client from \"./Typesense/Client\";\nimport SearchClient from \"./Typesense/SearchClient\";\nimport * as Errors from \"./Typesense/Errors\";\n\nexport { Client, SearchClient, Errors };\nexport default { Client, SearchClient, Errors };\n"],"mappings":"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","names":["logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","axios","HTTPAgent","HTTPSAgent","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","source","axios","response","error","candidateNode","i","isDueForHealthcheck","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RESOURCEPATH","Collections","apiCall","schema","options","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","key","queryParams","operation","Collections","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","createHmac","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","Typesense_default","Client","SearchClient","Errors_exports"]} \ No newline at end of file +{"version":3,"sources":["node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/Collections.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Utils.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/Client.ts"],"sourcesContent":["module.exports = {}","module.exports = {}","module.exports = {}","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"],"mappings":"klBAAA,IAAAA,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAAAA,GAAO,QAAU,CAAC,ICAlB,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAAAA,GAAO,QAAU,CAAC,ICAlB,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAAAA,GAAO,QAAU,CAAC,ICAlB,OAAOC,OAAY,WCAnB,IAAAC,GAAA,GAAAC,GAAAD,GAAA,eAAAE,EAAA,gBAAAC,EAAA,8BAAAC,EAAA,wBAAAC,EAAA,mBAAAC,EAAA,wBAAAC,EAAA,qBAAAC,EAAA,wBAAAC,EAAA,gBAAAC,EAAA,mBAAAC,ICAA,IAAqBC,EAArB,cAA4C,KAAM,CAKhD,YAAYC,EAAkBC,EAAmBC,EAAqB,CACpE,MAAMF,CAAO,EACb,KAAK,KAAO,WAAW,KACvB,KAAK,SAAWC,EAChB,KAAK,WAAaC,EAClB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,ECVA,IAAqBC,EAArB,cAAuCC,CAAe,CAAC,ECAvD,IAAqBC,EAArB,cAAuDC,CAAe,CAAC,ECAvE,IAAqBC,EAArB,cAAiDC,CAAe,CAAC,ECAjE,IAAqBC,EAArB,cAA4CC,CAAe,CAAC,ECA5D,IAAqBC,EAArB,cAAiDC,CAAe,CAAC,ECAjE,IAAqBC,EAArB,cAA8CC,CAAe,CAAC,ECA9D,IAAqBC,EAArB,cAAiDC,CAAe,CAAC,ECAjE,IAAqBC,EAArB,cAAyCC,CAAe,CAAC,ECSzD,IAAqBC,EAArB,cAAyCC,CAAe,CAGtD,YACEC,EACAC,EACAC,EACA,CACA,MAAMF,CAAO,EACb,KAAK,cAAgBC,EACrB,KAAK,QAAUC,CACjB,CACF,EXwFA,IAAqBC,EAArB,KAAmC,CAyBjC,YAAYC,EAA+B,CACzC,KAAK,MAAQA,EAAQ,OAAS,CAAC,EAC/B,KAAK,MAAQ,KAAK,MACf,IAAKC,GAAS,KAAK,qBAAqBA,CAAI,CAAC,EAC7C,IAAKA,GAAS,KAAK,qBAAqBA,CAAI,CAAC,EAC7C,IAAKA,IAAU,CAAE,GAAGA,CAAK,EAAE,EAE1BD,EAAQ,gBAAkB,OAC5BA,EAAQ,eAAiB,IAGvBA,EAAQ,iBAAmB,IAC7B,KAAK,aAAa,KAAK,KAAK,EAG9B,KAAK,YAAcA,EAAQ,YAC3B,KAAK,YAAc,KAAK,qBAAqB,KAAK,WAAW,EAC7D,KAAK,YAAc,KAAK,qBAAqB,KAAK,WAAW,EAE7D,KAAK,yBACHA,EAAQ,0BAA4BA,EAAQ,gBAAkB,EAChE,KAAK,2BAA6BA,EAAQ,4BAA8B,GACxE,KAAK,YACFA,EAAQ,aAAe,QAAaA,EAAQ,YAAc,EACvDA,EAAQ,WACR,KAAK,MAAM,QAAU,KAAK,aAAe,KAAO,EAAI,KAAO,EACjE,KAAK,qBAAuBA,EAAQ,sBAAwB,GAE5D,KAAK,OAASA,EAAQ,OACtB,KAAK,uBAAyBA,EAAQ,uBAEtC,KAAK,6BACHA,EAAQ,8BAAgC,EAC1C,KAAK,yBAA2BA,EAAQ,0BAA4B,GAEpE,KAAK,aAAeA,EAAQ,aAC5B,KAAK,OAASA,EAAQ,QAAUE,GAChC,KAAK,SAAWF,EAAQ,UAAY,OACpC,KAAK,OAAO,SAAS,KAAK,QAAQ,EAElC,KAAK,kBAAoBA,EAAQ,kBAEjC,KAAK,UAAYA,EAAQ,UACzB,KAAK,WAAaA,EAAQ,WAE1B,KAAK,iBAAmBA,EAAQ,iBAEhC,KAAK,wBAAwBA,CAAO,EACpC,KAAK,SAAS,CAChB,CAEA,UAAoB,CAClB,GAAI,KAAK,OAAS,MAAQ,KAAK,MAAM,SAAW,GAAK,KAAK,cAAc,EACtE,MAAM,IAAIG,EACR,qEACF,EAGF,GACE,KAAK,aAAe,MACpB,KAAK,2BAA2B,KAAK,WAAW,EAEhD,MAAM,IAAIA,EACR,oFACF,EAGF,GAAI,KAAK,QAAU,KACjB,MAAM,IAAIA,EAA0B,2BAA2B,EAGjE,MAAO,EACT,CAEQ,eAAyB,CAC/B,OAAO,KAAK,MAAM,KAAMF,GACf,KAAK,2BAA2BA,CAAI,CAC5C,CACH,CAEQ,2BACNA,EAIS,CACT,MACE,CAAC,CAAC,WAAY,OAAQ,OAAQ,MAAM,EAAE,MAAOG,GACpCH,EAAK,eAAeG,CAAG,CAC/B,GAAKH,EAAK,KAAU,IAEzB,CAEQ,qBACNA,EASY,CACZ,OAAIA,GAAQ,MAAQ,CAACA,EAAK,eAAe,MAAM,IAC7CA,EAAK,KAAU,IAEVA,CACT,CAEQ,qBACNA,EASY,CACZ,GACEA,GAAQ,MACR,CAACA,EAAK,eAAe,MAAM,GAC3BA,EAAK,eAAe,UAAU,EAE9B,OAAQA,EAAK,SAAa,CACxB,IAAK,QACHA,EAAK,KAAU,IACf,MACF,IAAK,OACHA,EAAK,KAAU,GACf,KACJ,CAEF,OAAOA,CACT,CAEQ,wBAAwBD,EAAqC,CAC/DA,EAAQ,gBACV,KAAK,OAAO,KACV,gFACF,EAEEA,EAAQ,YACV,KAAK,OAAO,KACV,oGACF,EAEEA,EAAQ,kBACV,KAAK,OAAO,KACV,0GACF,CAEJ,CAEQ,aAAaK,EAAO,CAC1B,QAASC,EAAID,EAAM,OAAS,EAAGC,EAAI,EAAGA,IAAK,CACzC,IAAMC,EAAI,KAAK,MAAM,KAAK,OAAO,GAAKD,EAAI,EAAE,EAC5C,CAACD,EAAMC,CAAC,EAAGD,EAAME,CAAC,CAAC,EAAI,CAACF,EAAME,CAAC,EAAGF,EAAMC,CAAC,CAAC,CAC5C,CACF,CACF,EYnSA,IAAAE,GAAmC,SACnCC,GAAoC,SAFpC,OAAOC,OAAW,QAgBlB,IAAMC,GAAmB,sBACnBC,GAAU,GACVC,GAAY,GAOZC,GACJ,OAAO,QAAY,KACnB,QAAQ,UAAY,MACpB,QAAQ,SAAS,MAAQ,KAENC,EAArB,KAA6B,CAc3B,YAAoBC,EAA8B,CAA9B,mBAAAA,EAClB,KAAK,OAAS,KAAK,cAAc,OACjC,KAAK,MACH,KAAK,cAAc,OAAS,KACxB,KAAK,cAAc,MACnB,KAAK,MAAM,KAAK,UAAU,KAAK,cAAc,KAAK,CAAC,EACzD,KAAK,YACH,KAAK,cAAc,aAAe,KAC9B,KAAK,cAAc,YACnB,KAAK,MAAM,KAAK,UAAU,KAAK,cAAc,WAAW,CAAC,EAC/D,KAAK,yBAA2B,KAAK,cAAc,yBACnD,KAAK,2BACH,KAAK,cAAc,2BACrB,KAAK,qBAAuB,KAAK,cAAc,WAC/C,KAAK,qBAAuB,KAAK,cAAc,qBAC/C,KAAK,uBAAyB,KAAK,cAAc,uBACjD,KAAK,sBAAwB,KAAK,cAAc,kBAEhD,KAAK,OAAS,KAAK,cAAc,OAEjC,KAAK,2BAA2B,EAChC,KAAK,iBAAmB,EAC1B,CAEA,MAAM,IACJC,EACAC,EAAuB,CAAC,EACxB,CACE,YAAAC,EAAc,KACd,aAAAC,EAAe,MACjB,EAGI,CAAC,EACO,CACZ,OAAO,KAAK,eAAkB,MAAOH,EAAU,CAC7C,gBAAAC,EACA,YAAAC,EACA,aAAAC,CACF,CAAC,CACH,CAEA,MAAM,OAAUH,EAAkBC,EAAuB,CAAC,EAAe,CACvE,OAAO,KAAK,eAAkB,SAAUD,EAAU,CAAE,gBAAAC,CAAgB,CAAC,CACvE,CAEA,MAAM,KACJD,EACAI,EAAsB,CAAC,EACvBH,EAAuB,CAAC,EACxBI,EAAyB,CAAC,EACd,CACZ,OAAO,KAAK,eAAkB,OAAQL,EAAU,CAC9C,gBAAAC,EACA,eAAAG,EACA,kBAAAC,CACF,CAAC,CACH,CAEA,MAAM,IACJL,EACAI,EAAsB,CAAC,EACvBH,EAAuB,CAAC,EACZ,CACZ,OAAO,KAAK,eAAkB,MAAOD,EAAU,CAC7C,gBAAAC,EACA,eAAAG,CACF,CAAC,CACH,CAEA,MAAM,MACJJ,EACAI,EAAsB,CAAC,EACvBH,EAAuB,CAAC,EACZ,CACZ,OAAO,KAAK,eAAkB,QAASD,EAAU,CAC/C,gBAAAC,EACA,eAAAG,CACF,CAAC,CACH,CAEQ,YAAuC,CAC7C,OAAK,KAAK,cAAc,aAEpB,OAAO,KAAK,cAAc,cAAiB,WACtC,KAAK,cAAc,aAG1B,OAAO,UAAc,KACrB,UAAU,YAAc,qBAGtBE,GAAM,WAAW,KAAK,cAAc,YAAY,EAAE,KAAK,UAAU,EACjEA,GAAM,WAAW,KAAK,cAAc,YAAY,EAXd,MAYxC,CAEA,MAAM,eACJC,EACAP,EACA,CACE,gBAAAC,EAAkB,KAClB,eAAAG,EAAiB,KACjB,kBAAAC,EAAoB,CAAC,EACrB,YAAAH,EAAc,KACd,aAAAC,EAAe,OACf,sBAAAK,EAAwB,GACxB,gBAAAC,EAAkB,MACpB,EASY,CACZ,KAAK,cAAc,SAAS,EAE5B,IAAMC,EAAgB,KAAK,IAAI,EAC3BC,EACAC,EAAa,GACjB,KAAK,OAAO,MACV,YAAYF,CAAa,gBAAgBH,EAAY,YAAY,CAAC,aAAaP,CAAQ,EACzF,EACA,QACMa,EAAW,EACfA,GAAY,KAAK,qBAAuB,EACxCA,IACA,CACA,IAAMC,EAAO,KAAK,YAAYJ,CAAa,EAO3C,GANA,KAAK,OAAO,MACV,YAAYA,CAAa,gBAAgBH,EAAY,YAAY,CAAC,iBAAiBM,CAAQ,YACzFC,EAAK,KACP,EACF,EAEIZ,GAAeA,EAAY,QAC7B,OAAO,QAAQ,OAAO,IAAI,MAAM,4BAA4B,CAAC,EAG/D,IAAIa,EAEJ,GAAI,CACF,IAAMC,EAA6C,CACjD,QAAS,KAAK,WAAW,EACzB,OAAQT,EACR,IAAK,KAAK,OAAOP,EAAUc,CAAI,EAC/B,QAAS,OAAO,OACd,CAAC,EACD,KAAK,eAAe,EACpBT,EACA,KAAK,qBACP,EACA,iBAAkB,IAClB,cAAe,IACf,aAAAF,EACA,eAAiBc,GAKRA,EAAS,EAElB,kBAAmB,CACjB,CAACC,EAAMC,IAAY,CACjB,IAAIC,GAAkBF,EACtB,OACEC,IAAY,QACZ,OAAOD,GAAS,UAChBC,EAAQ,cAAc,GACtBA,EAAQ,cAAc,EAAE,WAAW,kBAAkB,IAErDC,GAAkB,KAAK,MAAMF,CAAI,GAE5BE,EACT,CACF,CACF,EAiEA,GA/DIZ,IAA0B,KAC5BQ,EAAe,QAAU,KAAK,yBAA2B,KAGvDf,GAAmB,OAAO,KAAKA,CAAe,EAAE,SAAW,IAC7De,EAAe,OAASf,GAGtB,KAAK,yBACPe,EAAe,OAASA,EAAe,QAAU,CAAC,EAClDA,EAAe,OAAO,qBAAqB,EAAI,KAAK,QAGlD,KAAK,cAAc,WACrB,KAAK,OAAO,MACV,YAAYN,CAAa,0BAC3B,EACAM,EAAe,UAAY,KAAK,cAAc,WACrCP,IAAoB,KACxBZ,IAKH,KAAK,OAAO,MAAM,YAAYa,CAAa,sBAAsB,EACjEM,EAAe,UAAY,IAAI,GAAAK,MAAU,CAAE,UAAW,EAAK,CAAC,GAL5D,KAAK,OAAO,KACV,YAAYX,CAAa,4EAC3B,GAOA,KAAK,cAAc,YACrB,KAAK,OAAO,MACV,YAAYA,CAAa,2BAC3B,EACAM,EAAe,WAAa,KAAK,cAAc,YACtCP,IAAoB,KACxBZ,IAKH,KAAK,OAAO,MAAM,YAAYa,CAAa,sBAAsB,EACjEM,EAAe,WAAa,IAAI,GAAAM,MAAW,CAAE,UAAW,EAAK,CAAC,GAL9D,KAAK,OAAO,KACV,YAAYZ,CAAa,4EAC3B,GAOA,KAAK,cAAc,mBACrB,KAAK,OAAO,MACV,YAAYA,CAAa,iCAC3B,EACAM,EAAe,iBAAmB,KAAK,cAAc,kBAIrDZ,IACE,OAAOA,GAAmB,UAC1BA,EAAe,SAAW,GACzB,OAAOA,GAAmB,UACzB,OAAO,KAAKA,CAAc,EAAE,SAAW,KAE3CY,EAAe,KAAOZ,GAIpBF,EAAa,CAEf,IAAMqB,EADcjB,GAAM,YACC,OAAO,EAClCS,EAAgB,IAAM,CACpBH,EAAa,GACbW,EAAO,OAAO,CAChB,EACArB,EAAY,iBAAiB,QAASa,CAAa,EACnDC,EAAe,YAAcO,EAAO,KACtC,CAEA,IAAMC,EAAW,MAAMlB,GAAMU,CAAc,EAU3C,GATIQ,EAAS,QAAU,GAAKA,EAAS,QAAU,KAG7C,KAAK,mBAAmBV,EAAMnB,EAAO,EAEvC,KAAK,OAAO,MACV,YAAYe,CAAa,qBAAqBI,EAAK,KAAK,gCAAgCU,EAAS,MAAM,GACzG,EAEIA,EAAS,QAAU,KAAOA,EAAS,OAAS,IAE9C,OAAO,QAAQ,QAAQA,EAAS,IAAI,EAC/B,GAAIA,EAAS,OAAS,IAE3B,OAAO,QAAQ,OACb,KAAK,uBACHA,EACAA,EAAS,MAAM,QACfR,EAAe,IACjB,CACF,EAIA,MAAM,KAAK,uBACTQ,EACAA,EAAS,MAAM,QACfR,EAAe,IACjB,CAEJ,OAASS,EAAY,CAgBnB,GAdKb,GACH,KAAK,mBAAmBE,EAAMlB,EAAS,EAEzCe,EAAgBc,EAChB,KAAK,OAAO,KACV,YAAYf,CAAa,qBACvBI,EAAK,KACP,mBAAmBW,GAAO,MAAQ,EAAE,IAAIA,EAAM,OAAO,GACnDA,EAAM,UAAY,KACd,GACA,MAAQ,KAAK,UAAUA,EAAM,UAAU,IAAI,CACjD,GACF,EAEIb,EACF,OAAO,QAAQ,OAAO,IAAI,MAAM,4BAA4B,CAAC,EAE3DC,EAAW,KAAK,qBAAuB,GACzC,KAAK,OAAO,KACV,YAAYH,CAAa,kBAAkB,KAAK,oBAAoB,gCACtE,EAEF,MAAM,KAAK,MAAM,KAAK,oBAAoB,CAC5C,QAAE,CACIR,GAAea,GACjBb,EAAY,oBAAoB,QAASa,CAAa,CAE1D,CACF,CACA,YAAK,OAAO,MACV,YAAYL,CAAa,uCAC3B,EACO,QAAQ,OAAOC,CAAa,CACrC,CAKA,YAAYD,EAAgB,EAAS,CAEnC,GAAI,KAAK,aAAe,KAAM,CAM5B,GALA,KAAK,OAAO,MACV,YAAYA,CAAa,wBACvB,KAAK,YAAY,KACnB,OAAO,KAAK,YAAY,YAAc,GAAO,UAAY,WAAW,EACtE,EAEE,KAAK,YAAY,YAAc,IAC/B,KAAK,sBAAsB,KAAK,YAAaA,CAAa,EAE1D,YAAK,OAAO,MACV,YAAYA,CAAa,kCAAkC,KAAK,YAAY,KAAK,EACnF,EACO,KAAK,YAEd,KAAK,OAAO,MACV,YAAYA,CAAa,oCAC3B,CACF,CAGA,KAAK,OAAO,MACV,YAAYA,CAAa,mBAAmB,KAAK,MAC9C,IACEI,GACC,QAAQA,EAAK,KAAK,OAChBA,EAAK,YAAc,GAAO,UAAY,WACxC,EACJ,EACC,KAAK,MAAM,CAAC,EACjB,EACA,IAAIY,EAAsB,KAAK,MAAM,CAAC,EACtC,QAAS,EAAI,EAAG,GAAK,KAAK,MAAM,OAAQ,IAGtC,GAFA,KAAK,kBAAoB,KAAK,iBAAmB,GAAK,KAAK,MAAM,OACjEA,EAAgB,KAAK,MAAM,KAAK,gBAAgB,EAE9CA,EAAc,YAAc,IAC5B,KAAK,sBAAsBA,EAAehB,CAAa,EAEvD,YAAK,OAAO,MACV,YAAYA,CAAa,kCAAkCgB,EAAc,KAAK,EAChF,EACOA,EAMX,YAAK,OAAO,MACV,YAAYhB,CAAa,gEAAgEgB,EAAc,KAAK,EAC9G,EACOA,CACT,CAEA,sBAAsBZ,EAAMJ,EAAgB,EAAY,CACtD,IAAMiB,EACJ,KAAK,IAAI,EAAIb,EAAK,oBAClB,KAAK,2BAA6B,IACpC,OAAIa,GACF,KAAK,OAAO,MACV,YAAYjB,CAAa,UAAUI,EAAK,KAAK,8CAA8C,KAAK,0BAA0B,iCAC5H,EAEKa,CACT,CAEA,4BAAmC,CAC7B,KAAK,aAAe,OACtB,KAAK,YAAY,MAAQ,cACzB,KAAK,mBAAmB,KAAK,YAAahC,EAAO,GAGnD,KAAK,MAAM,QAAQ,CAACmB,EAAMc,IAAM,CAC9Bd,EAAK,MAAQc,EACb,KAAK,mBAAmBd,EAAMnB,EAAO,CACvC,CAAC,CACH,CAEA,mBAAmBmB,EAAMe,EAAiB,CACxCf,EAAK,UAAYe,EACjBf,EAAK,oBAAsB,KAAK,IAAI,CACtC,CAEA,OAAOd,EAAkBc,EAAc,CACrC,OAAIA,EAAK,KAAO,KACP,GAAGA,EAAK,GAAG,GAAGd,CAAQ,GAExB,GAAGc,EAAK,QAAQ,MAAMA,EAAK,IAAI,IAAIA,EAAK,IAAI,GAAGA,EAAK,IAAI,GAAGd,CAAQ,EAC5E,CAEA,gBAAsB,CACpB,IAAM8B,EAAiB,CAAC,EACxB,OAAK,KAAK,yBACRA,EAAepC,EAAgB,EAAI,KAAK,QAE1CoC,EAAe,cAAc,EAAI,mBAC1BA,CACT,CAEA,MAAM,MAAMC,EAAwB,CAClC,OAAO,IAAI,QAASC,GAAY,WAAWA,EAASD,EAAU,GAAI,CAAC,CACrE,CAEA,uBACEP,EACAS,EACAC,EACgB,CAChB,IAAIC,EAAe,iCAAiCX,EAAS,MAAM,GAEjE,OAAOS,GAAsB,UAC7BA,EAAkB,KAAK,IAAM,KAE7BE,GAAgB,mBAAmBF,CAAiB,IAGtD,IAAIR,EAAQ,IAAIW,EAAeD,EAAcD,EAAUV,EAAS,MAAM,EAEtE,OAAIA,EAAS,SAAW,IACtBC,EAAQ,IAAIY,EAAiBF,CAAY,EAChCX,EAAS,SAAW,IAC7BC,EAAQ,IAAIa,EAAoBH,CAAY,EACnCX,EAAS,SAAW,IAC7BC,EAAQ,IAAIc,EAAeJ,CAAY,EAC9BX,EAAS,SAAW,IAC7BC,EAAQ,IAAIe,EAAoBL,CAAY,EACnCX,EAAS,SAAW,IAC7BC,EAAQ,IAAIgB,EAAoBN,CAAY,EACnCX,EAAS,QAAU,KAAOA,EAAS,QAAU,IACtDC,EAAQ,IAAIiB,EAAYP,CAAY,EAEpCV,EAAQ,IAAIkB,EAAUR,CAAY,EAG7BV,CACT,CACF,EC9fA,IAAqBmB,EAArB,KAAsC,CAAtC,cACE,KAAQ,cAAkC,IAAI,IAC9C,KAAQ,qBAAyC,IAAI,IAErD,YAAa,CACX,KAAK,cAAgB,IAAI,IACzB,KAAK,qBAAuB,IAAI,GAClC,CAGA,MAAM,QACJC,EACAC,EACAC,EACAC,EACsB,CACtB,GAAM,CACJ,wBAAAC,EAA0B,IAC1B,QAAAC,EAAU,GACZ,EAAIF,EAGJ,GAFwBC,GAA2B,GAAKC,GAAW,EAGjE,OAAOJ,EAAgB,KAAKD,EAAgB,GAAGE,CAAwB,EAGzE,IAAMI,EAA+B,KAAK,UACxCJ,CACF,EACMK,EAAa,KAAK,cAAc,IAAID,CAA4B,EAChEE,EAAM,KAAK,IAAI,EAErB,GAAID,EAAY,CAGd,GADEC,EAAMD,EAAW,iBAAmBH,EAA0B,IAE9D,YAAK,cAAc,OAAOE,CAA4B,EACtD,KAAK,cAAc,IAAIA,EAA8BC,CAAU,EACxD,QAAQ,QAAQA,EAAW,QAAQ,EAE1C,KAAK,cAAc,OAAOD,CAA4B,CAE1D,CAEA,IAAMG,EAAoB,KAAK,qBAAqB,IAClDH,CACF,EAEA,GAAIG,EAAmB,CAIrB,GAFED,EAAMC,EAAkB,iBACxBL,EAA0B,IAE1B,YAAK,qBAAqB,OAAOE,CAA4B,EAC7D,KAAK,qBAAqB,IACxBA,EACAG,CACF,EACOA,EAAkB,gBAEzB,KAAK,qBAAqB,OAAOH,CAA4B,CAEjE,CAEA,IAAMI,EAAkBT,EAAgB,KACtCD,EACA,GAAGE,CACL,EACA,KAAK,qBAAqB,IAAII,EAA8B,CAC1D,iBAAkBE,EAClB,gBAAAE,CACF,CAAC,EAED,IAAMC,EAAW,MAAMD,EAOvB,GANA,KAAK,cAAc,IAAIJ,EAA8B,CACnD,iBAAkBE,EAClB,SAAAG,CACF,CAAC,EAE0B,KAAK,cAAc,KAAON,EAC7B,CACtB,IAAMO,EAAc,KAAK,cAAc,KAAK,EAAE,KAAK,EAAE,MACjDA,GACF,KAAK,cAAc,OAAOA,CAAW,CAEzC,CAGA,GADE,KAAK,qBAAqB,KAAOP,EACI,CACrC,IAAMO,EAAc,KAAK,qBAAqB,KAAK,EAAE,KAAK,EAAE,MACxDA,GACF,KAAK,qBAAqB,OAAOA,CAAW,CAEhD,CACA,OAAOD,CACT,CACF,EC3EA,IAAME,GAAe,eAEAC,EAArB,KAAiC,CAC/B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,OACJC,EACAC,EAAmC,CAAC,EACT,CAC3B,OAAO,KAAK,QAAQ,KAAuBJ,GAAcG,EAAQC,CAAO,CAC1E,CAEA,MAAM,SACJA,EAAsC,CAAC,EACV,CAC7B,OAAO,KAAK,QAAQ,IAAwBJ,GAAcI,CAAO,CACnE,CAEA,WAAW,cAAe,CACxB,OAAOJ,EACT,CACF,EC/BA,IAAMK,GAAe,aAERC,EAAN,KAEP,CAGE,YACYC,EACAC,EACAC,EACV,CAHU,oBAAAF,EACA,aAAAC,EACA,mBAAAC,EALZ,KAAU,iBAAqC,IAAIC,CAMhD,CAEH,YAAa,CACX,KAAK,iBAAiB,WAAW,CACnC,CAEA,MAAM,OACJC,EACA,CACE,6BAAAC,EAA+B,KAAK,cACjC,6BACH,YAAAC,EAAc,IAChB,EAAmB,CAAC,EACQ,CAC5B,IAAMC,EAAwB,CAAC,EAC3B,KAAK,cAAc,2BAA6B,KAClDA,EAAsB,UAAe,IAEvC,IAAMC,EAAmBC,EAAyBL,CAAgB,EAC5DM,EAAc,OAAO,OACzB,CAAC,EACDH,EACAC,CACF,EAEA,OAAO,KAAK,iBAAiB,QAC3B,KAAK,QACL,KAAK,QAAQ,IACb,CAAC,KAAK,aAAa,QAAQ,EAAGE,EAAa,CAAE,YAAAJ,CAAY,CAAC,EAC1D,CACE,wBAAyBD,CAC3B,CACF,CACF,CAEU,aAAaM,EAAoB,CACzC,MAAO,GAAGC,EAAY,YAAY,IAAI,KAAK,cAAc,GAAGd,EAAY,GACtEa,IAAc,OAAY,GAAK,IAAMA,CACvC,EACF,CAEA,WAAW,cAAe,CACxB,OAAOb,EACT,CACF,ECAO,IAAMe,GAAkC,CAC7C,SAAU,WACV,iBAAkB,mBAClB,SAAU,WACV,SAAU,WACV,eAAgB,iBAChB,eAAgB,iBAChB,iBAAkB,mBAClB,sBAAuB,wBACvB,YAAa,cACb,YAAa,cACb,MAAO,QACP,cAAe,gBACf,UAAW,YACX,OAAQ,SACR,QAAS,SACX,EAuNMC,GACJ,OAAO,QAAY,KACnB,QAAQ,UAAY,MACpB,QAAQ,SAAS,MAAQ,KAENC,EAArB,cACUC,CAEV,CACE,YACEC,EACAC,EACAC,EACA,CACA,MAAMF,EAAgBC,EAASC,CAAa,CAC9C,CAEA,MAAM,OAAOC,EAAaC,EAAmC,CAAC,EAAe,CAC3E,GAAI,CAACD,EAAU,MAAM,IAAI,MAAM,sBAAsB,EACrD,OAAO,KAAK,QAAQ,KAAQ,KAAK,aAAa,EAAGA,EAAUC,CAAO,CACpE,CAEA,MAAM,OAAOD,EAAaC,EAAmC,CAAC,EAAe,CAC3E,GAAI,CAACD,EAAU,MAAM,IAAI,MAAM,sBAAsB,EACrD,OAAO,KAAK,QAAQ,KAClB,KAAK,aAAa,EAClBA,EACA,OAAO,OAAO,CAAC,EAAGC,EAAS,CAAE,OAAQ,QAAS,CAAC,CACjD,CACF,CAOA,MAAM,OACJD,EACAC,EAA8D,CAAC,EAC1B,CACrC,GAAI,CAACD,EAAU,MAAM,IAAI,MAAM,sBAAsB,EAErD,OAAIC,EAAQ,WAAgB,KACnB,KAAK,QAAQ,MAClB,KAAK,aAAa,EAClBD,EACA,OAAO,OAAO,CAAC,EAAGC,CAAO,CAC3B,EAEO,KAAK,QAAQ,KAClB,KAAK,aAAa,EAClBD,EACA,OAAO,OAAO,CAAC,EAAGC,EAAS,CAAE,OAAQ,QAAS,CAAC,CACjD,CAEJ,CAEA,MAAM,OACJC,EAAqB,CAAC,EACG,CACzB,OAAO,KAAK,QAAQ,OAAuB,KAAK,aAAa,EAAGA,CAAK,CACvE,CAEA,MAAM,WAAWC,EAAgBF,EAAoC,CAAC,EAAG,CACvE,YAAK,cAAc,OAAO,KACxB,iKACF,EACO,KAAK,OAAOE,EAAWF,CAAO,CACvC,CAgBA,MAAM,OACJE,EACAF,EAAoC,CAAC,EACD,CACpC,IAAIG,EACJ,GAAI,MAAM,QAAQD,CAAS,EACzB,GAAI,CACFC,EAAyBD,EACtB,IAAKH,GAAa,KAAK,UAAUA,CAAQ,CAAC,EAC1C,KAAK;AAAA,CAAI,CACd,OAASK,EAAY,CAEnB,MACEA,aAAiB,YACjBA,EAAM,QAAQ,SAAS,kCAAkC,EAEnD,IAAI,MAAM,GAAGA,CAAK;AAAA;AAAA;AAAA;AAAA,WAIvB,EAIG,IAAI,MAAMA,CAAK,CACvB,MAEAD,EAAyBD,EAG3B,IAAMG,EAAuB,MAAM,KAAK,QAAQ,eAC9C,OACA,KAAK,aAAa,QAAQ,EAC1B,CACE,gBAAiBL,EACjB,eAAgBG,EAChB,kBAAmB,CAAE,eAAgB,YAAa,EAClD,sBAAuB,GACvB,gBAAiB,EAAAV,EACnB,CACF,EAEA,GAAI,MAAM,QAAQS,CAAS,EAAG,CAC5B,IAAMI,EAAsBD,EACzB,MAAM;AAAA,CAAI,EACV,IAAKE,GAAM,KAAK,MAAMA,CAAC,CAAC,EACrBC,EAAcF,EAAoB,OACrCC,GAAMA,EAAE,UAAY,EACvB,EACA,GAAIC,EAAY,OAAS,EACvB,MAAM,IAAIC,EACR,GACEH,EAAoB,OAASE,EAAY,MAC3C,qCACEA,EAAY,MACd,2IACAF,EACA,CACE,uBAAAH,EACA,QAAAH,EACA,YAAAQ,EACA,aAAcF,EAAoB,OAASE,EAAY,MACzD,CACF,EAEA,OAAOF,CAEX,KACE,QAAOD,CAEX,CAIA,MAAM,aACJK,EACAV,EAAoC,CAAC,EACV,CAa3B,IAAMM,GAZuB,MAAM,KAAK,QAAQ,eAC9C,OACA,KAAK,aAAa,QAAQ,EAC1B,CACE,gBAAiBN,EACjB,eAAgBU,EAChB,kBAAmB,CAAE,eAAgB,YAAa,EAClD,sBAAuB,GACvB,gBAAiB,EAAAjB,EACnB,CACF,GAGG,MAAM;AAAA,CAAI,EACV,IAAKc,GAAM,KAAK,MAAMA,CAAC,CAAC,EACrBC,EAAcF,EAAoB,OAAQC,GAAMA,EAAE,UAAY,EAAK,EACzE,GAAIC,EAAY,OAAS,EACvB,MAAM,IAAIC,EACR,GACEH,EAAoB,OAASE,EAAY,MAC3C,qCACEA,EAAY,MACd,2IACAF,EACA,CACE,uBAAwBI,EACxB,QAAAV,EACA,YAAAQ,EACA,aAAcF,EAAoB,OAASE,EAAY,MACzD,CACF,EAEA,OAAOF,CAEX,CAKA,MAAM,OAAON,EAAqC,CAAC,EAAoB,CACrE,OAAO,KAAK,QAAQ,IAAY,KAAK,aAAa,QAAQ,EAAGA,CAAO,CACtE,CAKA,MAAM,aACJA,EAAqC,CAAC,EACjB,CACrB,OAAO,KAAK,QAAQ,IAAgB,KAAK,aAAa,QAAQ,EAAGA,EAAS,CACxE,aAAc,QAChB,CAAC,CACH,CACF,EC5fA,SAASW,GACPC,EAC+B,CAC/B,OAAO,OAAO,KAAKC,EAAe,EAC/B,OAAQC,GAAQF,EAAOE,CAAG,IAAM,MAAS,EACzC,MAAOA,GAAQC,GAAgBH,EAAOE,CAAG,CAAC,CAAC,CAChD,CAEO,SAASE,EACdJ,EAC+B,CAC/B,IAAMK,EAAS,CAAE,GAAGL,CAAO,EAS3B,GAAI,CAPsB,OAAO,KAAKC,EAAe,EAClD,OAAQC,GAAQ,MAAM,QAAQG,EAAOH,CAAG,CAAC,CAAC,EAC1C,IAAKA,IACJG,EAAOH,CAAG,EAAIG,EAAOH,CAAG,EAAE,KAAK,GAAG,EAC3BA,EACR,EAEoB,QAAUH,GAAiBM,CAAM,EACtD,OAAOA,EAGT,GAAI,CAACN,GAAiBM,CAAM,EAC1B,MAAM,IAAI,MACR,yCAAyC,KAAK,UAAUA,CAAM,CAAC,EACjE,EAGF,OAAOA,CACT,CAEA,SAASF,GACPG,EACiC,CACjC,MAAO,CAAC,MAAM,QAAQA,CAAK,CAC7B,CCjCA,IAAMC,GAAe,gBAuBAC,EAArB,KAAiC,CAG/B,YACUC,EACAC,EACAC,EAA8B,GACtC,CAHQ,aAAAF,EACA,mBAAAC,EACA,wBAAAC,EAER,KAAK,iBAAmB,IAAIC,CAC9B,CAEA,YAAa,CACX,KAAK,iBAAiB,WAAW,CACnC,CAEA,MAAM,QACJC,EACAC,EAAkD,CAAC,EACnD,CACE,6BAAAC,EAA+B,KAAK,cACjC,4BACL,EAA+C,CAAC,EACf,CACjC,IAAMC,EAAoB,CAAC,EACvB,KAAK,qBACPA,EAAkB,cAAc,EAAI,cAGtC,IAAMC,EAAwB,CAAC,EAC3B,KAAK,cAAc,2BAA6B,KAClDA,EAAsB,UAAe,IAGvC,IAAMC,EAAc,CAAE,GAAGJ,EAAc,GAAGG,CAAsB,EAE1DE,EAA2B,CAC/B,SAAUN,EAAe,SAAS,IAAIO,CAAwB,CAChE,EAEMC,EAAwBD,EAAyBF,CAAW,EAElE,OAAO,KAAK,iBAAiB,QAC3B,KAAK,QACL,KAAK,QAAQ,KACb,CACEX,GACAY,EACAE,EACAL,CACF,EACA,CAAE,wBAAyBD,CAA6B,CAC1D,CACF,CACF,ECnFO,IAAMO,GAAN,KAA8D,CAGnE,YACmBC,EACAC,EACAC,EACjB,CAHiB,UAAAF,EACA,aAAAC,EACA,mBAAAC,EAEjB,KAAK,WAAa,IAAIC,EACpB,KAAK,KACL,KAAK,QACL,KAAK,aACP,CACF,CAEA,WAAoC,CAClC,OAAO,KAAK,UACd,CACF,EChBA,IAAqBC,GAArB,KAAkC,CAMhC,YAAYC,EAA+B,CACzCA,EAAQ,uBAAyBA,EAAQ,wBAA0B,GAEjEA,EAAQ,yBAA2B,KAClCA,EAAQ,QAAU,IAAI,OAAS,MAEhC,QAAQ,KACN,mIACF,EACAA,EAAQ,uBAAyB,IAGnC,KAAK,cAAgB,IAAIC,EAAcD,CAAO,EAC9C,KAAK,QAAU,IAAIE,EAAQ,KAAK,aAAa,EAC7C,KAAK,YAAc,IAAIC,EAAY,KAAK,QAAS,KAAK,cAAe,EAAI,EACzE,KAAK,sBAAwB,CAAC,CAChC,CAEA,YAAa,CACX,KAAK,YAAY,WAAW,EAG5B,OAAO,QAAQ,KAAK,qBAAqB,EAAE,QAAQ,CAAC,CAACC,EAAGC,CAAU,IAAM,CACtEA,EAAW,UAAU,EAAE,WAAW,CACpC,CAAC,CACH,CAEA,YACEC,EAC8D,CAC9D,GAAKA,EAMH,OAAI,KAAK,sBAAsBA,CAAc,IAAM,SACjD,KAAK,sBAAsBA,CAAc,EAAI,IAAIC,GAC/CD,EACA,KAAK,QACL,KAAK,aACP,GAEK,KAAK,sBAAsBA,CAAc,EAZhD,MAAM,IAAI,MACR,8LAEF,CAWJ,CACF,ECtDA,IAAME,GAAe,aAuCAC,EAArB,MAAqBC,CAAU,CAC7B,YACUC,EACAC,EACR,CAFQ,oBAAAD,EACA,aAAAC,CACP,CAEH,MAAM,OACJC,EACAC,EACyB,CACzB,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAU,EAC5BC,CACF,CACF,CAEA,MAAM,UAA6C,CACjD,OAAO,KAAK,QAAQ,IAA6B,KAAK,aAAa,CAAC,CACtE,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGC,EAAY,YAAY,IAAI,KAAK,cAAc,GACvDN,EAAU,YACZ,GAAGK,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CAAC,EACvE,CAEA,WAAW,cAAuB,CAChC,OAAOP,EACT,CACF,EC5DA,IAAqBS,EAArB,KAA8B,CAC5B,YACUC,EACAC,EACAC,EACR,CAHQ,oBAAAF,EACA,gBAAAC,EACA,aAAAC,CACP,CAEH,MAAM,UAAoC,CACxC,OAAO,KAAK,QAAQ,IAAoB,KAAK,aAAa,CAAC,CAC7D,CAEA,MAAM,QAAwC,CAC5C,OAAO,KAAK,QAAQ,OAA6B,KAAK,aAAa,CAAC,CACtE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAY,YAAY,IAAI,mBAAmB,KAAK,cAAc,CAAC,GAAGC,EAAU,YAAY,IAAI,mBAAmB,KAAK,UAAU,CAAC,EAC/I,CACF,EC1BA,IAAMC,GAAe,YAaAC,EAArB,MAAqBC,CAAS,CAC5B,YAAoBC,EAAgCC,EAAkB,CAAlD,oBAAAD,EAAgC,aAAAC,CAAmB,CAEvE,MAAM,OACJC,EACAC,EACwB,CACxB,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAS,EAC3BC,CACF,CACF,CAEA,MAAM,UAA4C,CAChD,OAAO,KAAK,QAAQ,IAA4B,KAAK,aAAa,CAAC,CACrE,CAEQ,aAAaC,EAAoB,CACvC,MAAO,GAAGC,EAAY,YAAY,IAAI,mBAAmB,KAAK,cAAc,CAAC,GAC3EN,EAAS,YACX,GAAGK,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CAAC,EACvE,CAEA,WAAW,cAAuB,CAChC,OAAOP,EACT,CACF,EC/BA,IAAqBS,EAArB,KAA6B,CAC3B,YACUC,EACAC,EACAC,EACR,CAHQ,oBAAAF,EACA,eAAAC,EACA,aAAAC,CACP,CAEH,MAAM,UAAmC,CACvC,OAAO,KAAK,QAAQ,IAAmB,KAAK,aAAa,CAAC,CAC5D,CAEA,MAAM,QAAuC,CAC3C,OAAO,KAAK,QAAQ,OAA4B,KAAK,aAAa,CAAC,CACrE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAY,YAAY,IAAI,mBAAmB,KAAK,cAAc,CAAC,GAAGC,EAAS,YAAY,IAAI,mBAAmB,KAAK,SAAS,CAAC,EAC7I,CACF,ECtBO,IAAMC,GAAN,KAAkD,CACvD,YACUC,EACAC,EACAC,EACR,CAHQ,oBAAAF,EACA,gBAAAC,EACA,aAAAC,CACP,CAEH,MAAM,UAAuB,CAC3B,OAAO,KAAK,QAAQ,IAAO,KAAK,aAAa,CAAC,CAChD,CAEA,MAAM,OAAOC,EAAmC,CAC9C,OAAO,KAAK,QAAQ,OAAU,KAAK,aAAa,EAAGA,CAAO,CAC5D,CAEA,MAAM,OACJC,EACAD,EAAmC,CAAC,EACxB,CACZ,OAAO,KAAK,QAAQ,MAAS,KAAK,aAAa,EAAGC,EAAiBD,CAAO,CAC5E,CAEQ,cAAuB,CAC7B,MAAO,GAAGE,EAAY,YAAY,IAAI,mBAAmB,KAAK,cAAc,CAAC,GAAGC,EAAU,YAAY,IAAI,mBAAmB,KAAK,UAAU,CAAC,EAC/I,CACF,ECgCA,IAAqBC,EAArB,KAAmE,CAQjE,YACmBC,EACAC,EACAC,EACjB,CAHiB,UAAAF,EACA,aAAAC,EACA,mBAAAC,EATnB,KAAQ,oBAAmD,CAAC,EAE5D,KAAQ,oBAAgD,CAAC,EAEzD,KAAQ,mBAA8C,CAAC,EAOrD,KAAK,KAAOF,EACZ,KAAK,QAAUC,EACf,KAAK,cAAgBC,EAErB,KAAK,WAAa,IAAIC,EACpB,KAAK,KACL,KAAK,QACL,KAAK,aACP,EACA,KAAK,WAAa,IAAIC,EAAU,KAAK,KAAM,KAAK,OAAO,EACvD,KAAK,UAAY,IAAIC,EAAS,KAAK,KAAM,KAAK,OAAO,CACvD,CAEA,MAAM,UAAsC,CAC1C,OAAO,KAAK,QAAQ,IAAsB,KAAK,aAAa,CAAC,CAC/D,CAEA,MAAM,OAAOC,EAA2D,CACtE,OAAO,KAAK,QAAQ,MAAwB,KAAK,aAAa,EAAGA,CAAM,CACzE,CAEA,MAAM,OACJC,EAAmC,CAAC,EACT,CAC3B,OAAO,KAAK,QAAQ,OAAyB,KAAK,aAAa,EAAGA,CAAO,CAC3E,CAEA,MAAM,QAA2B,CAC/B,GAAI,CACF,aAAM,KAAK,SAAS,EACb,EACT,OAAS,EAAG,CACV,GAAI,aAAaC,EAAgB,MAAO,GACxC,MAAM,CACR,CACF,CAIA,UAAUC,EAAiD,CACzD,OAAKA,GAGC,KAAK,oBAAoBA,CAAU,IAAM,SAC3C,KAAK,oBAAoBA,CAAU,EAAI,IAAIC,GACzC,KAAK,KACLD,EACA,KAAK,OACP,GAEK,KAAK,oBAAoBA,CAAU,GATnC,KAAK,UAWhB,CAIA,UAAUE,EAA2C,CACnD,OAAIA,IAAe,OACV,KAAK,YAER,KAAK,oBAAoBA,CAAU,IAAM,SAC3C,KAAK,oBAAoBA,CAAU,EAAI,IAAIC,EACzC,KAAK,KACLD,EACA,KAAK,OACP,GAEK,KAAK,oBAAoBA,CAAU,EAE9C,CAIA,SAASE,EAAwC,CAC/C,OAAIA,IAAc,OACT,KAAK,WAER,KAAK,mBAAmBA,CAAS,IAAM,SACzC,KAAK,mBAAmBA,CAAS,EAAI,IAAIC,EACvC,KAAK,KACLD,EACA,KAAK,OACP,GAEK,KAAK,mBAAmBA,CAAS,EAE5C,CAEQ,cAAuB,CAC7B,MAAO,GAAGE,EAAY,YAAY,IAAI,mBAAmB,KAAK,IAAI,CAAC,EACrE,CACF,ECvKA,IAAMC,GAAe,WAcAC,EAArB,MAAqBC,CAAQ,CAC3B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,OACJC,EACAC,EACgC,CAChC,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAI,EACtBC,CACF,CACF,CAEA,MAAM,UAAqD,CACzD,OAAO,KAAK,QAAQ,IAAqCL,EAAY,CACvE,CAEQ,aAAaM,EAAmB,CACtC,MAAO,GAAGJ,EAAQ,YAAY,IAAI,mBAAmBI,CAAS,CAAC,EACjE,CAEA,WAAW,cAAuB,CAChC,OAAON,EACT,CACF,ECrCA,IAAqBO,EAArB,KAA2B,CACzB,YAAoBC,EAAsBC,EAAkB,CAAxC,UAAAD,EAAsB,aAAAC,CAAmB,CAE7D,MAAM,UAA2C,CAC/C,OAAO,KAAK,QAAQ,IAA2B,KAAK,aAAa,CAAC,CACpE,CAEA,MAAM,QAAyC,CAC7C,OAAO,KAAK,QAAQ,OAA8B,KAAK,aAAa,CAAC,CACvE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAQ,YAAY,IAAI,mBAAmB,KAAK,IAAI,CAAC,EACjE,CACF,ECjBA,IAAAC,GAA2B,SAM3B,IAAMC,GAAe,QAYAC,EAArB,MAAqBC,CAAK,CACxB,YAAoBC,EAAkB,CAAlB,aAAAA,EAClB,KAAK,QAAUA,CACjB,CAEA,MAAM,OAAOC,EAA6C,CACxD,OAAO,KAAK,QAAQ,KAAgBF,EAAK,aAAcE,CAAM,CAC/D,CAEA,MAAM,UAAwC,CAC5C,OAAO,KAAK,QAAQ,IAAwBJ,EAAY,CAC1D,CAEA,wBACEK,EACAC,EACQ,CAGR,IAAMC,EAAmBC,EAAyBF,CAAU,EACtDG,EAAa,KAAK,UAAUF,CAAgB,EAC5CG,EAAS,OAAO,QACpB,eAAW,SAAUL,CAAS,EAAE,OAAOI,CAAU,EAAE,OAAO,QAAQ,CACpE,EACME,EAAYN,EAAU,OAAO,EAAG,CAAC,EACjCO,EAAe,GAAGF,CAAM,GAAGC,CAAS,GAAGF,CAAU,GAEvD,OAAO,OAAO,KAAKG,CAAY,EAAE,SAAS,QAAQ,CACpD,CAEA,WAAW,cAAe,CACxB,OAAOZ,EACT,CACF,EC9BA,IAAqBa,EAArB,KAAyB,CACvB,YACUC,EACAC,EACR,CAFQ,QAAAD,EACA,aAAAC,CACP,CAEH,MAAM,UAA+B,CACnC,OAAO,KAAK,QAAQ,IAAe,KAAK,aAAa,CAAC,CACxD,CAEA,MAAM,QAAmC,CACvC,OAAO,KAAK,QAAQ,OAAwB,KAAK,aAAa,CAAC,CACjE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAK,YAAY,IAAI,mBAAmB,KAAK,EAAE,CAAC,EAC5D,CACF,ECpCA,IAAMC,GAAe,SAOAC,EAArB,KAA2B,CACzB,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,UAAyC,CAC7C,OAAO,KAAK,QAAQ,IAAyBF,EAAY,CAC3D,CACF,ECbA,IAAMG,GAAe,gBAsBAC,EAArB,KAA6B,CAC3B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,UAAqC,CACzC,OAAO,KAAK,QAAQ,IAAIF,EAAY,CACtC,CACF,EC5BA,IAAMG,GAAe,cAsBAC,GAArB,KAA6B,CAC3B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,UAAmC,CACvC,OAAO,KAAK,QAAQ,IAAIF,EAAY,CACtC,CACF,EC5BA,IAAMG,GAAe,UAMAC,GAArB,KAA4B,CAC1B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,UAAoC,CACxC,OAAO,KAAK,QAAQ,IAAoBF,EAAY,CACtD,CACF,ECZA,IAAMG,GAAe,cAEAC,GAArB,KAAgC,CAC9B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,QAEJC,EACAC,EAAuC,CAAC,EAC1B,CACd,OAAO,KAAK,QAAQ,KAClB,GAAGJ,EAAY,IAAIG,CAAa,GAChC,CAAC,EACDC,CACF,CACF,CACF,ECZA,IAAMC,GAAe,WAUAC,EAArB,MAAqBC,CAAQ,CAC3B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,OACJC,EACAC,EACuB,CACvB,GAAI,OAAOA,EAAO,OAAU,UAAY,aAAcA,EAAO,MAAO,CAClE,IAAMC,EAAmBD,EAAO,MAAM,SAAS,IAAKE,GAClDC,EAAyBD,CAAM,CACjC,EAEA,OAAO,KAAK,QAAQ,IAAkB,KAAK,aAAaH,CAAQ,EAAG,CACjE,MAAO,CAAE,SAAUE,CAAiB,CACtC,CAAC,CACH,CACA,IAAMA,EAAmBE,EAAyBH,EAAO,KAAK,EAE9D,OAAO,KAAK,QAAQ,IAAkB,KAAK,aAAaD,CAAQ,EAAG,CACjE,MAAOE,CACT,CAAC,CACH,CAEA,MAAM,UAA2C,CAC/C,OAAO,KAAK,QAAQ,IAA2B,KAAK,aAAa,CAAC,CACpE,CAEQ,aAAaG,EAA4B,CAC/C,MAAO,GAAGP,EAAQ,YAAY,GAC5BO,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CACnE,EACF,CAEA,WAAW,cAAuB,CAChC,OAAOT,EACT,CACF,ECzCA,IAAqBU,GAArB,KAA4B,CAC1B,YAAoBC,EAA0BC,EAAkB,CAA5C,cAAAD,EAA0B,aAAAC,CAAmB,CAEjE,MAAM,UAAkC,CACtC,OAAO,KAAK,QAAQ,IAAkB,KAAK,aAAa,CAAC,CAC3D,CAEA,MAAM,QAAsC,CAC1C,OAAO,KAAK,QAAQ,OAA2B,KAAK,aAAa,CAAC,CACpE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAQ,YAAY,IAAI,mBAAmB,KAAK,QAAQ,CAAC,EACrE,CACF,ECfA,IAAMC,GAAe,mBAEAC,EAArB,MAAqBC,CAAe,CAClC,YAA6BC,EAAkB,CAAlB,aAAAA,EAC3B,KAAK,QAAUA,CACjB,CAEA,MAAM,OACJC,EACAC,EACoC,CACpC,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAI,EACtBC,CACF,CACF,CAEA,MAAM,UAAkD,CACtD,OAAO,KAAK,QAAQ,IAAkC,KAAK,aAAa,CAAC,CAC3E,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGJ,EAAe,YAAY,GACnCI,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CACnE,EACF,CAEA,WAAW,cAAe,CACxB,OAAON,EACT,CACF,ECRA,IAAqBO,GAArB,KAAmC,CACjC,YACUC,EACAC,EACR,CAFQ,UAAAD,EACA,aAAAC,CACP,CAEH,MAAM,UAAyC,CAC7C,OAAO,KAAK,QAAQ,IAAyB,KAAK,aAAa,CAAC,CAClE,CAEA,MAAM,QAA6C,CACjD,OAAO,KAAK,QAAQ,OAAkC,KAAK,aAAa,CAAC,CAC3E,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAe,YAAY,IAAI,mBAAmB,KAAK,IAAI,CAAC,EACxE,CACF,EC9CA,IAAMC,GAAe,oBAEAC,GAArB,MAAqBC,CAAgB,CACnC,YAA6BC,EAAkB,CAAlB,aAAAA,EAC3B,KAAK,QAAUA,CACjB,CAEA,MAAM,OACJC,EACqC,CACrC,OAAO,KAAK,QAAQ,KAClB,KAAK,aAAa,EAClBA,CACF,CACF,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGH,EAAgB,YAAY,GACpCG,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CACnE,EACF,CAEA,WAAW,cAAe,CACxB,OAAOL,EACT,CACF,ECvBA,IAAMM,GAAe,aAEAC,GAArB,KAA+B,CAK7B,YAA6BC,EAAkB,CAAlB,aAAAA,EAH7B,KAAiB,yBAA0D,CAAC,EAI1E,KAAK,QAAUA,EACf,KAAK,gBAAkB,IAAIC,EAAe,KAAK,OAAO,EACtD,KAAK,iBAAmB,IAAIC,GAAgB,KAAK,OAAO,CAC1D,CAIA,MAAMC,EAA6C,CACjD,OAAIA,IAAO,OACF,KAAK,iBAER,KAAK,yBAAyBA,CAAE,IAAM,SACxC,KAAK,yBAAyBA,CAAE,EAAI,IAAIC,GAAcD,EAAI,KAAK,OAAO,GAEjE,KAAK,yBAAyBA,CAAE,EAE3C,CAEA,QAA0B,CACxB,OAAO,KAAK,gBACd,CAEA,WAAW,cAAe,CACxB,OAAOL,EACT,CACF,ECnCA,IAAMO,GAAe,aAWAC,EAArB,MAAqBC,CAAU,CAC7B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,OACJC,EACAC,EACyB,CACzB,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAU,EAC5BC,CACF,CACF,CAEA,MAAM,UAA6C,CACjD,OAAO,KAAK,QAAQ,IAA6B,KAAK,aAAa,CAAC,CACtE,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGJ,EAAU,YAAY,GAC9BI,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CACnE,EACF,CAEA,WAAW,cAAuB,CAChC,OAAON,EACT,CACF,EC3BA,IAAqBO,GAArB,KAA8B,CAC5B,YACUC,EACAC,EACR,CAFQ,gBAAAD,EACA,aAAAC,CACP,CAEH,MAAM,UAAoC,CACxC,OAAO,KAAK,QAAQ,IAAoB,KAAK,aAAa,CAAC,CAC7D,CAEA,MAAM,QAAwC,CAC5C,OAAO,KAAK,QAAQ,OAA6B,KAAK,aAAa,CAAC,CACtE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAU,YAAY,IAAI,mBAAmB,KAAK,UAAU,CAAC,EACzE,CACF,ECxBA,IAAMC,GAAe,wBAEAC,EAArB,MAAqBC,CAAmB,CACtC,YAA6BC,EAAkB,CAAlB,aAAAA,EAC3B,KAAK,QAAUA,CACjB,CAEA,MAAM,OACJC,EACwC,CACxC,OAAO,KAAK,QAAQ,KAClB,KAAK,aAAa,EAClBA,CACF,CACF,CAEA,MAAM,UAA+C,CACnD,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAa,CACpB,CACF,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGH,EAAmB,YAAY,GACvCG,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CACnE,EACF,CAEA,WAAW,cAAe,CACxB,OAAOL,EACT,CACF,ECjBA,IAAqBM,GAArB,KAAuC,CACrC,YACUC,EACAC,EACR,CAFQ,QAAAD,EACA,aAAAC,CACP,CAEH,MAAM,OACJC,EACwC,CACxC,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAa,EAClBA,CACF,CACF,CAEA,MAAM,UAA6C,CACjD,OAAO,KAAK,QAAQ,IAA6B,KAAK,aAAa,CAAC,CACtE,CAEA,MAAM,QAAiD,CACrD,OAAO,KAAK,QAAQ,OAClB,KAAK,aAAa,CACpB,CACF,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAmB,YAAY,IAAI,mBAAmB,KAAK,EAAE,CAAC,EAC1E,CACF,EC3CA,IAAMC,GAAe,iBAMAC,EAArB,KAAmC,CAOjC,YAA6BC,EAAkB,CAAlB,aAAAA,EAL7B,KAAiB,6BAGb,CAAC,EAGH,KAAK,QAAUA,EACf,KAAK,qBAAuB,IAAIC,EAAmB,KAAK,OAAO,CACjE,CAEA,MAAM,UAAiD,CACrD,OAAO,KAAK,QAAQ,IAAiCH,EAAY,CACnE,CAIA,OAAOI,EAAqD,CAC1D,OAAIA,IAAO,OACF,KAAK,sBAER,KAAK,6BAA6BA,CAAE,IAAM,SAC5C,KAAK,6BAA6BA,CAAE,EAAI,IAAIC,GAC1CD,EACA,KAAK,OACP,GAEK,KAAK,6BAA6BA,CAAE,EAE/C,CAEA,WAAW,cAAe,CACxB,OAAOJ,EACT,CACF,EC5BA,IAAqBM,GAArB,KAAkC,CAChC,YACUC,EACAC,EACR,CAFQ,QAAAD,EACA,aAAAC,CACP,CAEH,MAAM,UAA0C,CAC9C,OAAO,KAAK,QAAQ,IAA0B,KAAK,aAAa,CAAC,CACnE,CAEA,MAAM,OACJC,EACmC,CACnC,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAa,EAClBA,CACF,CACF,CAEA,MAAM,QAA4C,CAChD,OAAO,KAAK,QAAQ,OAAiC,KAAK,aAAa,CAAC,CAC1E,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAc,YAAY,IAAI,mBAAmB,KAAK,EAAE,CAAC,EACrE,CACF,ECpBA,IAAqBC,GAArB,KAA4B,CAuB1B,YAAYC,EAA+B,CACzCA,EAAQ,uBAAyBA,EAAQ,wBAA0B,GAEnE,KAAK,cAAgB,IAAIC,EAAcD,CAAO,EAC9C,KAAK,QAAU,IAAIE,EAAQ,KAAK,aAAa,EAC7C,KAAK,MAAQ,IAAIC,EAAM,KAAK,OAAO,EACnC,KAAK,QAAU,IAAIC,EAAQ,KAAK,OAAO,EACvC,KAAK,MAAQ,IAAIA,GAAM,KAAK,OAAO,EACnC,KAAK,OAAS,IAAIC,GAAO,KAAK,OAAO,EACrC,KAAK,WAAa,IAAIC,GAAW,KAAK,OAAO,EAC7C,KAAK,YAAc,IAAIC,EAAY,KAAK,QAAS,KAAK,aAAa,EACnE,KAAK,aAAe,IAAIC,EAAY,KAAK,OAAO,EAChD,KAAK,sBAAwB,CAAC,EAC9B,KAAK,SAAW,IAAIC,EAAQ,KAAK,OAAO,EACxC,KAAK,kBAAoB,CAAC,EAC1B,KAAK,MAAQ,IAAIC,EAAK,KAAK,OAAO,EAClC,KAAK,eAAiB,CAAC,EACvB,KAAK,SAAW,IAAIC,EAAQ,KAAK,OAAO,EACxC,KAAK,kBAAoB,CAAC,EAC1B,KAAK,WAAa,IAAIC,EAAU,KAAK,OAAO,EAC5C,KAAK,oBAAsB,CAAC,EAC5B,KAAK,UAAY,IAAIC,GAAU,KAAK,OAAO,EAC3C,KAAK,eAAiB,IAAIC,EAAc,KAAK,OAAO,EACpD,KAAK,wBAA0B,CAAC,CAClC,CAMA,YAAYC,EAAmD,CAC7D,OAAIA,IAAmB,OACd,KAAK,cAER,KAAK,sBAAsBA,CAAc,IAAM,SACjD,KAAK,sBAAsBA,CAAc,EAAI,IAAIC,EAC/CD,EACA,KAAK,QACL,KAAK,aACP,GAEK,KAAK,sBAAsBA,CAAc,EAEpD,CAIA,QAAQE,EAAqC,CAC3C,OAAIA,IAAc,OACT,KAAK,UAER,KAAK,kBAAkBA,CAAS,IAAM,SACxC,KAAK,kBAAkBA,CAAS,EAAI,IAAIC,EAAMD,EAAW,KAAK,OAAO,GAEhE,KAAK,kBAAkBA,CAAS,EAE3C,CAIA,KAAKE,EAAyB,CAC5B,OAAIA,IAAO,OACF,KAAK,OAER,KAAK,eAAeA,CAAE,IAAM,SAC9B,KAAK,eAAeA,CAAE,EAAI,IAAIC,EAAID,EAAI,KAAK,OAAO,GAE7C,KAAK,eAAeA,CAAE,EAEjC,CAIA,QAAQA,EAA+B,CACrC,OAAIA,IAAO,OACF,KAAK,UAER,KAAK,kBAAkBA,CAAE,IAAM,SACjC,KAAK,kBAAkBA,CAAE,EAAI,IAAIE,GAAOF,EAAI,KAAK,OAAO,GAEnD,KAAK,kBAAkBA,CAAE,EAEpC,CAIA,UAAUA,EAAmC,CAC3C,OAAIA,IAAO,OACF,KAAK,YAER,KAAK,oBAAoBA,CAAE,IAAM,SACnC,KAAK,oBAAoBA,CAAE,EAAI,IAAIG,GAASH,EAAI,KAAK,OAAO,GAEvD,KAAK,oBAAoBA,CAAE,EAEtC,CAIA,cAAcA,EAA2C,CACvD,OAAIA,IAAO,OACF,KAAK,gBAER,KAAK,wBAAwBA,CAAE,IAAM,SACvC,KAAK,wBAAwBA,CAAE,EAAI,IAAII,GAAaJ,EAAI,KAAK,OAAO,GAE/D,KAAK,wBAAwBA,CAAE,EAE1C,CACF","names":["require_http","__commonJSMin","exports","module","require_https","__commonJSMin","exports","module","require_crypto","__commonJSMin","exports","module","logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","httpBody","httpStatus","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","payload","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","import_http","import_https","axios","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","HTTPAgent","HTTPSAgent","source","response","error","candidateNode","isDueForHealthcheck","i","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","httpBody","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","Collections","apiCall","schema","options","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","normalizedParams","normalizeArrayableParams","queryParams","operation","Collections","arrayableParams","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","hasNoArrayValues","params","arrayableParams","key","isNonArrayValue","normalizeArrayableParams","result","value","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","normalizedSearchRequests","normalizeArrayableParams","normalizedQueryParams","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","options","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","import_crypto","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","normalizedParams","normalizeArrayableParams","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","normalizedParams","search","normalizeArrayableParams","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation"]} \ No newline at end of file diff --git a/lib/Typesense.d.mts b/lib/Typesense.d.mts index de2d2e73..9814771e 100644 --- a/lib/Typesense.d.mts +++ b/lib/Typesense.d.mts @@ -3,6 +3,7 @@ import { Agent } from 'http'; import { Agent as Agent$1 } from 'https'; import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; import { ReadStream } from 'fs'; +import { ReadStream as ReadStream$1 } from 'node:fs'; interface NodeConfiguration { host: string; @@ -76,6 +77,17 @@ interface ConfigurationOptions { * @type {any} */ paramsSerializer?: any; + /** + * Set a custom axios adapter + * + * Useful for customizing the underlying HTTP client library used by Typesense. + * + * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge. + * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161 + * + * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config + */ + axiosAdapter?: AxiosRequestConfig["adapter"]; } declare class Configuration { readonly nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; @@ -94,6 +106,7 @@ declare class Configuration { readonly httpAgent?: Agent; readonly httpsAgent?: Agent$1; readonly paramsSerializer?: any; + readonly axiosAdapter?: AxiosRequestConfig["adapter"]; constructor(options: ConfigurationOptions); validate(): boolean; private validateNodes; @@ -106,7 +119,8 @@ declare class Configuration { declare class TypesenseError extends Error { httpStatus?: number; - constructor(message?: string); + httpBody?: string; + constructor(message?: string, httpBody?: string, httpStatus?: number); } interface Node extends NodeConfiguration { @@ -135,6 +149,7 @@ declare class ApiCall { post(endpoint: string, bodyParameters?: any, queryParameters?: any, additionalHeaders?: any): Promise; put(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; patch(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + private getAdapter; performRequest(requestType: Method, endpoint: string, { queryParameters, bodyParameters, additionalHeaders, abortSignal, responseType, skipConnectionTimeout, enableKeepAlive, }: { queryParameters?: any; bodyParameters?: any; @@ -151,7 +166,7 @@ declare class ApiCall { uriFor(endpoint: string, node: any): string; defaultHeaders(): any; timer(seconds: any): Promise; - customErrorForResponse(response: AxiosResponse, messageFromServer: string): TypesenseError; + customErrorForResponse(response: AxiosResponse, messageFromServer: string, httpBody?: string): TypesenseError; } declare class RequestWithCache { @@ -199,13 +214,28 @@ type DocumentSchema = Record; interface SearchParamsWithPreset extends Partial { preset: string; } +type DropTokensMode = "right_to_left" | "left_to_right" | "both_sides:3"; type OperationMode = "off" | "always" | "fallback"; +type UnionArrayKeys = { + [K in keyof T]: T[K] extends undefined ? never : NonNullable extends infer R ? R extends R[] ? never : R extends (infer U)[] | infer U ? U[] extends R ? K : never : never : never; +}[keyof T] & keyof T; +type UnionArraySearchParams = UnionArrayKeys; +type ArraybleParams = { + readonly [K in UnionArraySearchParams]: string; +}; +type ExtractBaseTypes = { + [K in keyof T]: K extends UnionArrayKeys ? T[K] extends (infer U)[] | infer U ? U : T[K] : T[K]; +}; +declare const arrayableParams: ArraybleParams; interface SearchParams { - q?: string; + q?: "*" | (string & {}); query_by?: string | string[]; query_by_weights?: string | number[]; prefix?: string | boolean | boolean[]; filter_by?: string; + enable_synonyms?: boolean; + enable_analytics?: boolean; + filter_curated_hits?: boolean; enable_lazy_filter?: boolean; sort_by?: string | string[]; facet_by?: string | string[]; @@ -215,6 +245,7 @@ interface SearchParams { facet_query?: string; facet_query_num_typos?: number; facet_return_parent?: string; + facet_strategy?: "exhaustive" | "top_values" | "automatic"; page?: number; per_page?: number; group_by?: string | string[]; @@ -235,12 +266,14 @@ interface SearchParams { split_join_tokens?: OperationMode; exhaustive_search?: boolean; drop_tokens_threshold?: number; + drop_tokens_mode?: DropTokensMode; typo_tokens_threshold?: number; pinned_hits?: string | string[]; hidden_hits?: string | string[]; limit_hits?: number; pre_segmented_query?: boolean; enable_overrides?: boolean; + override_tags?: string | string[]; prioritize_exact_match?: boolean; prioritize_token_position?: boolean; prioritize_num_matching_fields?: boolean; @@ -285,10 +318,10 @@ interface SearchResponseHit { document: T; text_match: number; text_match_info?: { - best_field_score: string; + best_field_score: `${number}`; best_field_weight: number; fields_matched: number; - score: string; + score: `${number}`; tokens_matched: number; }; } @@ -411,6 +444,55 @@ declare class Documents extends SearchOnlyDoc exportStream(options?: DocumentsExportParameters): Promise; } +interface MultiSearchRequestSchema extends SearchParams { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestsSchema { + searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; +} +interface MultiSearchResponse { + results: { + [Index in keyof T]: SearchResponse; + } & { + length: T["length"]; + }; +} +declare class MultiSearch { + private apiCall; + private configuration; + private useTextContentType; + private requestWithCache; + constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); + clearCache(): void; + perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { + cacheSearchResultsForSeconds?: number; + }): Promise>; +} + +declare class SearchOnlyCollection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + constructor(name: string, apiCall: ApiCall, configuration: any); + documents(): SearchableDocuments; +} + +declare class SearchClient { + readonly multiSearch: MultiSearch; + private readonly configuration; + private readonly apiCall; + private readonly individualCollections; + constructor(options: ConfigurationOptions); + clearCache(): void; + collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; +} + interface OverrideSchema extends OverrideCreateSchema { id: string; } @@ -528,6 +610,7 @@ interface CollectionFieldSchema { stem?: boolean; num_dim?: number; store?: boolean; + range_index?: boolean; [t: string]: unknown; } interface CollectionSchema extends CollectionCreateSchema { @@ -542,6 +625,9 @@ interface CollectionDropFieldSchema { interface CollectionUpdateSchema extends Partial> { fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[]; } +interface CollectionDeleteOptions { + compact_store?: boolean; +} declare class Collection { private readonly name; private readonly apiCall; @@ -555,7 +641,7 @@ declare class Collection { constructor(name: string, apiCall: ApiCall, configuration: any); retrieve(): Promise; update(schema: CollectionUpdateSchema): Promise; - delete(): Promise; + delete(options?: CollectionDeleteOptions): Promise; exists(): Promise; documents(): Documents; documents(documentId: string): Document; @@ -626,6 +712,7 @@ interface KeyCreateSchema { value?: string; value_prefix?: string; expires_at?: number; + autodelete?: boolean; } interface KeyDeleteSchema { id: number; @@ -730,37 +817,7 @@ declare class Health { declare class Operations { private apiCall; constructor(apiCall: ApiCall); - perform(operationName: "vote" | "snapshot" | "cache/clear" | string, queryParameters?: Record): Promise; -} - -interface MultiSearchRequestSchema extends SearchParams { - collection?: string; - "x-typesense-api-key"?: string; -} -interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { - collection?: string; - "x-typesense-api-key"?: string; -} -interface MultiSearchRequestsSchema { - searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; -} -interface MultiSearchResponse { - results: { - [Index in keyof T]: SearchResponse; - } & { - length: T["length"]; - }; -} -declare class MultiSearch { - private apiCall; - private configuration; - private useTextContentType; - private requestWithCache; - constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); - clearCache(): void; - perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { - cacheSearchResultsForSeconds?: number; - }): Promise>; + perform(operationName: "vote" | "snapshot" | "cache/clear" | (string & {}), queryParameters?: Record): Promise; } interface PresetSchema extends PresetCreateSchema { @@ -796,6 +853,7 @@ declare class Presets { interface AnalyticsRuleCreateSchema { type: "popular_queries" | "nohits_queries" | "counter"; params: { + enable_auto_aggregation?: boolean; source: { collections: string[]; events?: Array<{ @@ -842,7 +900,7 @@ declare class AnalyticsRules { interface AnalyticsEventCreateSchema { type: string; name: string; - data?: object; + data: Record; } declare class AnalyticsEvents { @@ -859,7 +917,8 @@ declare class Analytics { private readonly individualAnalyticsRules; private readonly _analyticsEvents; constructor(apiCall: ApiCall); - rules(id?: string): AnalyticsRules | AnalyticsRule; + rules(): AnalyticsRules; + rules(id: string): AnalyticsRule; events(): AnalyticsEvents; static get RESOURCEPATH(): string; } @@ -1003,25 +1062,6 @@ declare class Client { conversations(id: string): Conversation; } -declare class SearchOnlyCollection { - private readonly name; - private readonly apiCall; - private readonly configuration; - private readonly _documents; - constructor(name: string, apiCall: ApiCall, configuration: any); - documents(): SearchableDocuments; -} - -declare class SearchClient { - readonly multiSearch: MultiSearch; - private readonly configuration; - private readonly apiCall; - private readonly individualCollections; - constructor(options: ConfigurationOptions); - clearCache(): void; - collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; -} - declare class HTTPError extends TypesenseError { } @@ -1046,39 +1086,40 @@ declare class RequestUnauthorized extends TypesenseError { declare class ServerError extends TypesenseError { } +interface ImportErrorPayload { + documentsInJSONLFormat: string | ReadStream$1; + options: DocumentImportParameters; + failedItems: ImportResponse[]; + successCount: number; +} declare class ImportError extends TypesenseError { + payload: ImportErrorPayload; importResults: ImportResponse[]; - constructor(message: string, importResults: ImportResponse[]); + constructor(message: string, importResults: ImportResponse[], payload: ImportErrorPayload); } -type Errors_HTTPError = HTTPError; -declare const Errors_HTTPError: typeof HTTPError; -type Errors_ImportError = ImportError; -declare const Errors_ImportError: typeof ImportError; -type Errors_MissingConfigurationError = MissingConfigurationError; -declare const Errors_MissingConfigurationError: typeof MissingConfigurationError; -type Errors_ObjectAlreadyExists = ObjectAlreadyExists; -declare const Errors_ObjectAlreadyExists: typeof ObjectAlreadyExists; -type Errors_ObjectNotFound = ObjectNotFound; -declare const Errors_ObjectNotFound: typeof ObjectNotFound; -type Errors_ObjectUnprocessable = ObjectUnprocessable; -declare const Errors_ObjectUnprocessable: typeof ObjectUnprocessable; -type Errors_RequestMalformed = RequestMalformed; -declare const Errors_RequestMalformed: typeof RequestMalformed; -type Errors_RequestUnauthorized = RequestUnauthorized; -declare const Errors_RequestUnauthorized: typeof RequestUnauthorized; -type Errors_ServerError = ServerError; -declare const Errors_ServerError: typeof ServerError; -type Errors_TypesenseError = TypesenseError; -declare const Errors_TypesenseError: typeof TypesenseError; -declare namespace Errors { - export { Errors_HTTPError as HTTPError, Errors_ImportError as ImportError, Errors_MissingConfigurationError as MissingConfigurationError, Errors_ObjectAlreadyExists as ObjectAlreadyExists, Errors_ObjectNotFound as ObjectNotFound, Errors_ObjectUnprocessable as ObjectUnprocessable, Errors_RequestMalformed as RequestMalformed, Errors_RequestUnauthorized as RequestUnauthorized, Errors_ServerError as ServerError, Errors_TypesenseError as TypesenseError }; +type index_HTTPError = HTTPError; +declare const index_HTTPError: typeof HTTPError; +type index_ImportError = ImportError; +declare const index_ImportError: typeof ImportError; +type index_MissingConfigurationError = MissingConfigurationError; +declare const index_MissingConfigurationError: typeof MissingConfigurationError; +type index_ObjectAlreadyExists = ObjectAlreadyExists; +declare const index_ObjectAlreadyExists: typeof ObjectAlreadyExists; +type index_ObjectNotFound = ObjectNotFound; +declare const index_ObjectNotFound: typeof ObjectNotFound; +type index_ObjectUnprocessable = ObjectUnprocessable; +declare const index_ObjectUnprocessable: typeof ObjectUnprocessable; +type index_RequestMalformed = RequestMalformed; +declare const index_RequestMalformed: typeof RequestMalformed; +type index_RequestUnauthorized = RequestUnauthorized; +declare const index_RequestUnauthorized: typeof RequestUnauthorized; +type index_ServerError = ServerError; +declare const index_ServerError: typeof ServerError; +type index_TypesenseError = TypesenseError; +declare const index_TypesenseError: typeof TypesenseError; +declare namespace index { + export { index_HTTPError as HTTPError, index_ImportError as ImportError, index_MissingConfigurationError as MissingConfigurationError, index_ObjectAlreadyExists as ObjectAlreadyExists, index_ObjectNotFound as ObjectNotFound, index_ObjectUnprocessable as ObjectUnprocessable, index_RequestMalformed as RequestMalformed, index_RequestUnauthorized as RequestUnauthorized, index_ServerError as ServerError, index_TypesenseError as TypesenseError }; } -declare const _default: { - Client: typeof Client; - SearchClient: typeof SearchClient; - Errors: typeof Errors; -}; - -export { Client, Errors, SearchClient, _default as default }; +export { type AnalyticsEventCreateSchema, type AnalyticsRuleCreateSchema, type AnalyticsRuleDeleteSchema, type AnalyticsRuleSchema, type AnalyticsRulesRetrieveSchema, type ArraybleParams, Client, type CollectionAliasCreateSchema, type CollectionAliasSchema, type CollectionAliasesResponseSchema, type CollectionCreateOptions, type CollectionCreateSchema, type CollectionDeleteOptions, type CollectionDropFieldSchema, type CollectionFieldSchema, type CollectionSchema, type CollectionUpdateSchema, type CollectionsRetrieveOptions, type ConfigurationOptions, type ConversationDeleteSchema, type ConversationModelCreateSchema, type ConversationModelDeleteSchema, type ConversationModelSchema, type ConversationSchema, type ConversationUpdateSchema, type ConversationsRetrieveSchema, type DebugResponseSchema, type DeleteQuery, type DeleteResponse, type DocumentImportParameters, type DocumentSchema, type DocumentWriteParameters, type DocumentsExportParameters, type DropTokensMode, type EndpointStats, index as Errors, type ExtractBaseTypes, type FieldType, type GenerateScopedSearchKeyParams, type HealthResponse, type ImportResponse, type ImportResponseFail, type KeyCreateSchema, type KeyDeleteSchema, type KeySchema, type KeysRetrieveSchema, type MetricsResponse, type MultiSearchRequestSchema, type MultiSearchRequestWithPresetSchema, type MultiSearchRequestsSchema, type MultiSearchResponse, type NodeConfiguration, type NodeConfigurationWithHostname, type NodeConfigurationWithUrl, type OperationMode, type OverrideCreateSchema, type OverrideDeleteSchema, type OverrideRuleFilterSchema, type OverrideRuleQuerySchema, type OverrideRuleTagsSchema, type OverrideSchema, type OverridesRetrieveSchema, type PresetCreateSchema, type PresetDeleteSchema, type PresetSchema, type PresetsRetrieveSchema, SearchClient, type SearchOptions, type SearchParams, type SearchParamsWithPreset, type SearchResponse, type SearchResponseFacetCountSchema, type SearchResponseHighlight, type SearchResponseHit, type SearchResponseRequestParams, type SearchableDocuments, type StatsResponse, type StopwordCreateSchema, type StopwordDeleteSchema, type StopwordSchema, type StopwordsRetrieveSchema, type SynonymCreateSchema, type SynonymDeleteSchema, type SynonymSchema, type SynonymsRetrieveSchema, type UnionArrayKeys, type UnionArraySearchParams, type UpdateByFilterParameters, type UpdateByFilterResponse, type WriteableDocuments, arrayableParams }; diff --git a/lib/Typesense.d.ts b/lib/Typesense.d.ts index de2d2e73..9814771e 100644 --- a/lib/Typesense.d.ts +++ b/lib/Typesense.d.ts @@ -3,6 +3,7 @@ import { Agent } from 'http'; import { Agent as Agent$1 } from 'https'; import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; import { ReadStream } from 'fs'; +import { ReadStream as ReadStream$1 } from 'node:fs'; interface NodeConfiguration { host: string; @@ -76,6 +77,17 @@ interface ConfigurationOptions { * @type {any} */ paramsSerializer?: any; + /** + * Set a custom axios adapter + * + * Useful for customizing the underlying HTTP client library used by Typesense. + * + * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge. + * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161 + * + * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config + */ + axiosAdapter?: AxiosRequestConfig["adapter"]; } declare class Configuration { readonly nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; @@ -94,6 +106,7 @@ declare class Configuration { readonly httpAgent?: Agent; readonly httpsAgent?: Agent$1; readonly paramsSerializer?: any; + readonly axiosAdapter?: AxiosRequestConfig["adapter"]; constructor(options: ConfigurationOptions); validate(): boolean; private validateNodes; @@ -106,7 +119,8 @@ declare class Configuration { declare class TypesenseError extends Error { httpStatus?: number; - constructor(message?: string); + httpBody?: string; + constructor(message?: string, httpBody?: string, httpStatus?: number); } interface Node extends NodeConfiguration { @@ -135,6 +149,7 @@ declare class ApiCall { post(endpoint: string, bodyParameters?: any, queryParameters?: any, additionalHeaders?: any): Promise; put(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; patch(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + private getAdapter; performRequest(requestType: Method, endpoint: string, { queryParameters, bodyParameters, additionalHeaders, abortSignal, responseType, skipConnectionTimeout, enableKeepAlive, }: { queryParameters?: any; bodyParameters?: any; @@ -151,7 +166,7 @@ declare class ApiCall { uriFor(endpoint: string, node: any): string; defaultHeaders(): any; timer(seconds: any): Promise; - customErrorForResponse(response: AxiosResponse, messageFromServer: string): TypesenseError; + customErrorForResponse(response: AxiosResponse, messageFromServer: string, httpBody?: string): TypesenseError; } declare class RequestWithCache { @@ -199,13 +214,28 @@ type DocumentSchema = Record; interface SearchParamsWithPreset extends Partial { preset: string; } +type DropTokensMode = "right_to_left" | "left_to_right" | "both_sides:3"; type OperationMode = "off" | "always" | "fallback"; +type UnionArrayKeys = { + [K in keyof T]: T[K] extends undefined ? never : NonNullable extends infer R ? R extends R[] ? never : R extends (infer U)[] | infer U ? U[] extends R ? K : never : never : never; +}[keyof T] & keyof T; +type UnionArraySearchParams = UnionArrayKeys; +type ArraybleParams = { + readonly [K in UnionArraySearchParams]: string; +}; +type ExtractBaseTypes = { + [K in keyof T]: K extends UnionArrayKeys ? T[K] extends (infer U)[] | infer U ? U : T[K] : T[K]; +}; +declare const arrayableParams: ArraybleParams; interface SearchParams { - q?: string; + q?: "*" | (string & {}); query_by?: string | string[]; query_by_weights?: string | number[]; prefix?: string | boolean | boolean[]; filter_by?: string; + enable_synonyms?: boolean; + enable_analytics?: boolean; + filter_curated_hits?: boolean; enable_lazy_filter?: boolean; sort_by?: string | string[]; facet_by?: string | string[]; @@ -215,6 +245,7 @@ interface SearchParams { facet_query?: string; facet_query_num_typos?: number; facet_return_parent?: string; + facet_strategy?: "exhaustive" | "top_values" | "automatic"; page?: number; per_page?: number; group_by?: string | string[]; @@ -235,12 +266,14 @@ interface SearchParams { split_join_tokens?: OperationMode; exhaustive_search?: boolean; drop_tokens_threshold?: number; + drop_tokens_mode?: DropTokensMode; typo_tokens_threshold?: number; pinned_hits?: string | string[]; hidden_hits?: string | string[]; limit_hits?: number; pre_segmented_query?: boolean; enable_overrides?: boolean; + override_tags?: string | string[]; prioritize_exact_match?: boolean; prioritize_token_position?: boolean; prioritize_num_matching_fields?: boolean; @@ -285,10 +318,10 @@ interface SearchResponseHit { document: T; text_match: number; text_match_info?: { - best_field_score: string; + best_field_score: `${number}`; best_field_weight: number; fields_matched: number; - score: string; + score: `${number}`; tokens_matched: number; }; } @@ -411,6 +444,55 @@ declare class Documents extends SearchOnlyDoc exportStream(options?: DocumentsExportParameters): Promise; } +interface MultiSearchRequestSchema extends SearchParams { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { + collection?: string; + "x-typesense-api-key"?: string; +} +interface MultiSearchRequestsSchema { + searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; +} +interface MultiSearchResponse { + results: { + [Index in keyof T]: SearchResponse; + } & { + length: T["length"]; + }; +} +declare class MultiSearch { + private apiCall; + private configuration; + private useTextContentType; + private requestWithCache; + constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); + clearCache(): void; + perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { + cacheSearchResultsForSeconds?: number; + }): Promise>; +} + +declare class SearchOnlyCollection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + constructor(name: string, apiCall: ApiCall, configuration: any); + documents(): SearchableDocuments; +} + +declare class SearchClient { + readonly multiSearch: MultiSearch; + private readonly configuration; + private readonly apiCall; + private readonly individualCollections; + constructor(options: ConfigurationOptions); + clearCache(): void; + collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; +} + interface OverrideSchema extends OverrideCreateSchema { id: string; } @@ -528,6 +610,7 @@ interface CollectionFieldSchema { stem?: boolean; num_dim?: number; store?: boolean; + range_index?: boolean; [t: string]: unknown; } interface CollectionSchema extends CollectionCreateSchema { @@ -542,6 +625,9 @@ interface CollectionDropFieldSchema { interface CollectionUpdateSchema extends Partial> { fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[]; } +interface CollectionDeleteOptions { + compact_store?: boolean; +} declare class Collection { private readonly name; private readonly apiCall; @@ -555,7 +641,7 @@ declare class Collection { constructor(name: string, apiCall: ApiCall, configuration: any); retrieve(): Promise; update(schema: CollectionUpdateSchema): Promise; - delete(): Promise; + delete(options?: CollectionDeleteOptions): Promise; exists(): Promise; documents(): Documents; documents(documentId: string): Document; @@ -626,6 +712,7 @@ interface KeyCreateSchema { value?: string; value_prefix?: string; expires_at?: number; + autodelete?: boolean; } interface KeyDeleteSchema { id: number; @@ -730,37 +817,7 @@ declare class Health { declare class Operations { private apiCall; constructor(apiCall: ApiCall); - perform(operationName: "vote" | "snapshot" | "cache/clear" | string, queryParameters?: Record): Promise; -} - -interface MultiSearchRequestSchema extends SearchParams { - collection?: string; - "x-typesense-api-key"?: string; -} -interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { - collection?: string; - "x-typesense-api-key"?: string; -} -interface MultiSearchRequestsSchema { - searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; -} -interface MultiSearchResponse { - results: { - [Index in keyof T]: SearchResponse; - } & { - length: T["length"]; - }; -} -declare class MultiSearch { - private apiCall; - private configuration; - private useTextContentType; - private requestWithCache; - constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); - clearCache(): void; - perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { - cacheSearchResultsForSeconds?: number; - }): Promise>; + perform(operationName: "vote" | "snapshot" | "cache/clear" | (string & {}), queryParameters?: Record): Promise; } interface PresetSchema extends PresetCreateSchema { @@ -796,6 +853,7 @@ declare class Presets { interface AnalyticsRuleCreateSchema { type: "popular_queries" | "nohits_queries" | "counter"; params: { + enable_auto_aggregation?: boolean; source: { collections: string[]; events?: Array<{ @@ -842,7 +900,7 @@ declare class AnalyticsRules { interface AnalyticsEventCreateSchema { type: string; name: string; - data?: object; + data: Record; } declare class AnalyticsEvents { @@ -859,7 +917,8 @@ declare class Analytics { private readonly individualAnalyticsRules; private readonly _analyticsEvents; constructor(apiCall: ApiCall); - rules(id?: string): AnalyticsRules | AnalyticsRule; + rules(): AnalyticsRules; + rules(id: string): AnalyticsRule; events(): AnalyticsEvents; static get RESOURCEPATH(): string; } @@ -1003,25 +1062,6 @@ declare class Client { conversations(id: string): Conversation; } -declare class SearchOnlyCollection { - private readonly name; - private readonly apiCall; - private readonly configuration; - private readonly _documents; - constructor(name: string, apiCall: ApiCall, configuration: any); - documents(): SearchableDocuments; -} - -declare class SearchClient { - readonly multiSearch: MultiSearch; - private readonly configuration; - private readonly apiCall; - private readonly individualCollections; - constructor(options: ConfigurationOptions); - clearCache(): void; - collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; -} - declare class HTTPError extends TypesenseError { } @@ -1046,39 +1086,40 @@ declare class RequestUnauthorized extends TypesenseError { declare class ServerError extends TypesenseError { } +interface ImportErrorPayload { + documentsInJSONLFormat: string | ReadStream$1; + options: DocumentImportParameters; + failedItems: ImportResponse[]; + successCount: number; +} declare class ImportError extends TypesenseError { + payload: ImportErrorPayload; importResults: ImportResponse[]; - constructor(message: string, importResults: ImportResponse[]); + constructor(message: string, importResults: ImportResponse[], payload: ImportErrorPayload); } -type Errors_HTTPError = HTTPError; -declare const Errors_HTTPError: typeof HTTPError; -type Errors_ImportError = ImportError; -declare const Errors_ImportError: typeof ImportError; -type Errors_MissingConfigurationError = MissingConfigurationError; -declare const Errors_MissingConfigurationError: typeof MissingConfigurationError; -type Errors_ObjectAlreadyExists = ObjectAlreadyExists; -declare const Errors_ObjectAlreadyExists: typeof ObjectAlreadyExists; -type Errors_ObjectNotFound = ObjectNotFound; -declare const Errors_ObjectNotFound: typeof ObjectNotFound; -type Errors_ObjectUnprocessable = ObjectUnprocessable; -declare const Errors_ObjectUnprocessable: typeof ObjectUnprocessable; -type Errors_RequestMalformed = RequestMalformed; -declare const Errors_RequestMalformed: typeof RequestMalformed; -type Errors_RequestUnauthorized = RequestUnauthorized; -declare const Errors_RequestUnauthorized: typeof RequestUnauthorized; -type Errors_ServerError = ServerError; -declare const Errors_ServerError: typeof ServerError; -type Errors_TypesenseError = TypesenseError; -declare const Errors_TypesenseError: typeof TypesenseError; -declare namespace Errors { - export { Errors_HTTPError as HTTPError, Errors_ImportError as ImportError, Errors_MissingConfigurationError as MissingConfigurationError, Errors_ObjectAlreadyExists as ObjectAlreadyExists, Errors_ObjectNotFound as ObjectNotFound, Errors_ObjectUnprocessable as ObjectUnprocessable, Errors_RequestMalformed as RequestMalformed, Errors_RequestUnauthorized as RequestUnauthorized, Errors_ServerError as ServerError, Errors_TypesenseError as TypesenseError }; +type index_HTTPError = HTTPError; +declare const index_HTTPError: typeof HTTPError; +type index_ImportError = ImportError; +declare const index_ImportError: typeof ImportError; +type index_MissingConfigurationError = MissingConfigurationError; +declare const index_MissingConfigurationError: typeof MissingConfigurationError; +type index_ObjectAlreadyExists = ObjectAlreadyExists; +declare const index_ObjectAlreadyExists: typeof ObjectAlreadyExists; +type index_ObjectNotFound = ObjectNotFound; +declare const index_ObjectNotFound: typeof ObjectNotFound; +type index_ObjectUnprocessable = ObjectUnprocessable; +declare const index_ObjectUnprocessable: typeof ObjectUnprocessable; +type index_RequestMalformed = RequestMalformed; +declare const index_RequestMalformed: typeof RequestMalformed; +type index_RequestUnauthorized = RequestUnauthorized; +declare const index_RequestUnauthorized: typeof RequestUnauthorized; +type index_ServerError = ServerError; +declare const index_ServerError: typeof ServerError; +type index_TypesenseError = TypesenseError; +declare const index_TypesenseError: typeof TypesenseError; +declare namespace index { + export { index_HTTPError as HTTPError, index_ImportError as ImportError, index_MissingConfigurationError as MissingConfigurationError, index_ObjectAlreadyExists as ObjectAlreadyExists, index_ObjectNotFound as ObjectNotFound, index_ObjectUnprocessable as ObjectUnprocessable, index_RequestMalformed as RequestMalformed, index_RequestUnauthorized as RequestUnauthorized, index_ServerError as ServerError, index_TypesenseError as TypesenseError }; } -declare const _default: { - Client: typeof Client; - SearchClient: typeof SearchClient; - Errors: typeof Errors; -}; - -export { Client, Errors, SearchClient, _default as default }; +export { type AnalyticsEventCreateSchema, type AnalyticsRuleCreateSchema, type AnalyticsRuleDeleteSchema, type AnalyticsRuleSchema, type AnalyticsRulesRetrieveSchema, type ArraybleParams, Client, type CollectionAliasCreateSchema, type CollectionAliasSchema, type CollectionAliasesResponseSchema, type CollectionCreateOptions, type CollectionCreateSchema, type CollectionDeleteOptions, type CollectionDropFieldSchema, type CollectionFieldSchema, type CollectionSchema, type CollectionUpdateSchema, type CollectionsRetrieveOptions, type ConfigurationOptions, type ConversationDeleteSchema, type ConversationModelCreateSchema, type ConversationModelDeleteSchema, type ConversationModelSchema, type ConversationSchema, type ConversationUpdateSchema, type ConversationsRetrieveSchema, type DebugResponseSchema, type DeleteQuery, type DeleteResponse, type DocumentImportParameters, type DocumentSchema, type DocumentWriteParameters, type DocumentsExportParameters, type DropTokensMode, type EndpointStats, index as Errors, type ExtractBaseTypes, type FieldType, type GenerateScopedSearchKeyParams, type HealthResponse, type ImportResponse, type ImportResponseFail, type KeyCreateSchema, type KeyDeleteSchema, type KeySchema, type KeysRetrieveSchema, type MetricsResponse, type MultiSearchRequestSchema, type MultiSearchRequestWithPresetSchema, type MultiSearchRequestsSchema, type MultiSearchResponse, type NodeConfiguration, type NodeConfigurationWithHostname, type NodeConfigurationWithUrl, type OperationMode, type OverrideCreateSchema, type OverrideDeleteSchema, type OverrideRuleFilterSchema, type OverrideRuleQuerySchema, type OverrideRuleTagsSchema, type OverrideSchema, type OverridesRetrieveSchema, type PresetCreateSchema, type PresetDeleteSchema, type PresetSchema, type PresetsRetrieveSchema, SearchClient, type SearchOptions, type SearchParams, type SearchParamsWithPreset, type SearchResponse, type SearchResponseFacetCountSchema, type SearchResponseHighlight, type SearchResponseHit, type SearchResponseRequestParams, type SearchableDocuments, type StatsResponse, type StopwordCreateSchema, type StopwordDeleteSchema, type StopwordSchema, type StopwordsRetrieveSchema, type SynonymCreateSchema, type SynonymDeleteSchema, type SynonymSchema, type SynonymsRetrieveSchema, type UnionArrayKeys, type UnionArraySearchParams, type UpdateByFilterParameters, type UpdateByFilterResponse, type WriteableDocuments, arrayableParams }; diff --git a/lib/Typesense.min.js b/lib/Typesense.min.js index b00e14d2..d054c090 100644 --- a/lib/Typesense.min.js +++ b/lib/Typesense.min.js @@ -1,9 +1,9 @@ -"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel);var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||_loglevel2.default,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var _http = require('http');var _https = require('https');var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new (0, _http.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new (0, _https.Agent)({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=_axios2.default.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await _axios2.default.call(void 0, l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,_optionalChain([m, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message])));throw this.customErrorForResponse(m,_optionalChain([m, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]))}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(_optionalChain([l, 'access', _6 => _6.response, 'optionalAccess', _7 => _7.data]))}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var Ke=Object.create;var fe=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var ye=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ze=(r,e)=>{for(var t in e)fe(r,t,{get:e[t],enumerable:!0})},Le=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of We(e))!je.call(r,s)&&s!==t&&fe(r,s,{get:()=>e[s],enumerable:!(i=Me(e,s))||i.enumerable});return r};var ge=(r,e,t)=>(t=r!=null?Ke(Fe(r)):{},Le(e||!r||!r.__esModule?fe(t,"default",{value:r,enumerable:!0}):t,r));var _e=ye((jt,xe)=>{"use strict";xe.exports={}});var be=ye((zt,Ae)=>{"use strict";Ae.exports={}});var $e=ye((Yr,He)=>{"use strict";He.exports={}});var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel);var Re={};ze(Re,{HTTPError:()=>R,ImportError:()=>g,MissingConfigurationError:()=>f,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>y,ObjectUnprocessable:()=>_,RequestMalformed:()=>A,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype)}};var R=class extends l{};var f=class extends l{};var x=class extends l{};var y=class extends l{};var _=class extends l{};var A=class extends l{};var b=class extends l{};var T=class extends l{};var g=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==void 0&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||_loglevel2.default,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new f("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new f("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new f("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}};var Ee=ge(_e()),we=ge(be());var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var Je="X-TYPESENSE-API-KEY",Ce=!0,Be=!1,Te=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:i=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},s={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:s})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?_axios2.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis):_axios2.default.getAdapter(this.configuration.axiosAdapter):void 0}async performRequest(e,t,{queryParameters:i=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:a=null,responseType:h=void 0,skipConnectionTimeout:m=!1,enableKeepAlive:C=void 0}){this.configuration.validate();let c=Date.now(),S,F=!1;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:j=>j>0,transformResponse:[(j,z)=>{let Pe=j;return z!==void 0&&typeof j=="string"&&z["content-type"]&&z["content-type"].startsWith("application/json")&&(Pe=JSON.parse(j)),Pe}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new Ee.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new we.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(o.data=s),a){let z=_axios2.default.CancelToken.source();Q=()=>{F=!0,z.cancel()},a.addEventListener("abort",Q),o.cancelToken=z.token}let d=await _axios2.default.call(void 0, o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Ce),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,_optionalChain([d, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message]),o.data));throw this.customErrorForResponse(d,_optionalChain([d, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]),o.data)}catch(o){if(F||this.setNodeHealthcheck(P,Be),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${_nullishCoalesce(_optionalChain([o, 'optionalAccess', _6 => _6.code]), () => (""))} ${o.message}${o.response==null?"":" - "+JSON.stringify(_optionalChain([o, 'access', _7 => _7.response, 'optionalAccess', _8 => _8.data]))}"`),F)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Ce)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Ce)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Je]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let s=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(s+=` | Server said: ${t}`);let n=new l(s,i,e.status);return e.status===400?n=new A(s):e.status===401?n=new b(s):e.status===404?n=new y(s):e.status===409?n=new x(s):e.status===422?n=new _(s):e.status>=500&&e.status<=599?n=new T(s):n=new R(s),n}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,i,s){let{cacheResponseForSeconds:n=120,maxSize:a=100}=s;if(n<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o)}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o)}return v}};var Se="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(Se,e,t)}async retrieve(e={}){return this.apiCall.get(Se,e)}static get RESOURCEPATH(){return Se}};var Oe="/documents",L=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);let n=u(e),a=Object.assign({},s,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Oe}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var ve={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},Ne=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,N=class extends L{constructor(e,t,i){super(e,t,i)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(n=>JSON.stringify(n)).join(` `)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object - Please try reducing the number of keys in your document, or using CURL to import your data. - `):new Error(n)}else r=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se});if(Array.isArray(e)){let n=s.split(` -`).map(I=>JSON.parse(I)),o=n.filter(I=>I.success===!1);if(o.length>0)throw new f(`${n.length-o.length} documents imported successfully, ${o.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n);return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se})).split(` -`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};var _crypto = require('crypto');var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(_crypto.createHmac.call(void 0, "sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var $i={Client:le,SearchClient:ce,Errors:he};exports.Client = le; exports.Errors = he; exports.SearchClient = ce; exports.default = $i; + Please try reducing the number of keys in your document, or using CURL to import your data. + `):new Error(n)}else i=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne});if(Array.isArray(e)){let n=s.split(` +`).map(h=>JSON.parse(h)),a=n.filter(h=>h.success===!1);if(a.length>0)throw new g(`${n.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:n.length-a.length});return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne})).split(` +`).map(a=>JSON.parse(a)),n=s.filter(a=>a.success===!1);if(n.length>0)throw new g(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:e,options:t,failedItems:n,successCount:s.length-n.length});return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function De(r){return Object.keys(ve).filter(e=>r[e]!==void 0).every(e=>Ve(r[e]))}function u(r){let e={...r};if(!Object.keys(ve).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&De(e))return e;if(!De(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Ve(r){return!Array.isArray(r)}var Ye="/multi_search",D=class{constructor(e,t,i=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let a={...t,...n},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ye,h,m,s],{cacheResponseForSeconds:i})}};var me=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new L(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var de=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Ge="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ge}};var J=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var Xe="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Xe}};var B=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var he=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${N.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var V=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new N(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof y)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new he(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new J(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new B(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ue="/aliases",$=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(Ue)}endpointPath(e){return`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ue}};var Y=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ie=ge($e());var qe="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(qe)}generateScopedSearchKey(e,t){let i=u(t),s=JSON.stringify(i),n=Buffer.from((0,Ie.createHmac)("sha256",e).update(s).digest("base64")),a=e.substr(0,4),h=`${n}${a}${s}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var Ze="/debug",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ze)}};var et="/metrics.json",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(et)}};var tt="/stats.json",ee=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(tt)}};var rt="/health",te=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(rt)}};var it="/operations",re=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${it}/${e}`,{},t)}};var st="/presets",I=class r{constructor(e){this.apiCall=e}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let s=t.value.searches.map(n=>u(n));return this.apiCall.put(this.endpointPath(e),{value:{searches:s}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return st}};var ie=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var nt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return nt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ot="/analytics/events",ne=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ot}};var at="/analytics",oe=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new ne(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return at}};var lt="/stopwords",K=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var ae=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var ct="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var le=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ke="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall)}async retrieve(){return this.apiCall.get(ke)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new le(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return ke}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ue=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new X(this.apiCall),this.metrics=new Z(this.apiCall),this.stats=new ee(this.apiCall),this.health=new te(this.apiCall),this.operations=new re(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new oe(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new V(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new Y(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new G(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new ie(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ae(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ce(e,this.apiCall)),this.individualConversations[e])}};exports.Client = ue; exports.Errors = Re; exports.SearchClient = de; //# sourceMappingURL=Typesense.min.js.map \ No newline at end of file diff --git a/lib/Typesense.min.js.map b/lib/Typesense.min.js.map index 75a3baad..75d56cd2 100644 --- a/lib/Typesense.min.js.map +++ b/lib/Typesense.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["/home/fanis/code/typesense/typesense-js/lib/Typesense.min.js","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/MultiSearch.ts"],"names":["Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","importResults","Configuration","options","node","logger","key","array","i","j","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException"],"mappings":"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","file":"/home/fanis/code/typesense/typesense-js/lib/Typesense.min.js","sourcesContent":[null,"import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["/home/fanis/code/typesense/js-lib/lib/Typesense.min.js","node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/Alias.ts"],"names":["require_http","__commonJSMin","exports","module","require_https","require_crypto","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","httpBody","httpStatus","importResults","payload","Configuration","options","node","logger","key","array","i","j","import_http","import_https","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted"],"mappings":"AAAA,qxBAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCAjlB,IAAAA,EAAAA,CAAAC,EAAAA,CAAA,CAAAC,EAAAA,CAAAC,EAAAA,CAAAA,EAAA,CAAA,YAAA,CAAAA,EAAAA,CAAO,OAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CCAlB,IAAAC,EAAAA,CAAAH,EAAAA,CAAA,CAAAC,EAAAA,CAAAC,EAAAA,CAAAA,EAAA,CAAA,YAAA,CAAAA,EAAAA,CAAO,OAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CCAlB,IAAAE,EAAAA,CAAAJ,EAAAA,CAAA,CAAAC,EAAAA,CAAAC,EAAAA,CAAAA,EAAA,CAAA,YAAA,CAAAA,EAAAA,CAAO,OAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CCAlB,wFAAmB,ICAnBG,EAAAA,CAAA,CAAA,CAAA,CAAAC,EAAAA,CAAAD,EAAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,EAAAE,CAAAA,CAAA,WAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,yBAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,cAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,WAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,cAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAAA,CAAAA,CCAA,IAAqBA,CAAAA,CAArB,MAAA,QAA4C,KAAM,CAKhD,WAAA,CAAYC,CAAAA,CAAkBC,CAAAA,CAAmBC,CAAAA,CAAqB,CACpE,KAAA,CAAMF,CAAO,CAAA,CACb,IAAA,CAAK,IAAA,CAAO,GAAA,CAAA,MAAA,CAAW,IAAA,CACvB,IAAA,CAAK,QAAA,CAAWC,CAAAA,CAChB,IAAA,CAAK,UAAA,CAAaC,CAAAA,CAClB,MAAA,CAAO,cAAA,CAAe,IAAA,CAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAClD,CACF,CAAA,CCVA,IAAqBZ,CAAAA,CAArB,MAAA,QAAuCS,CAAe,CAAC,CAAA,CCAvD,IAAqBP,CAAAA,CAArB,MAAA,QAAuDO,CAAe,CAAC,CAAA,CCAvE,IAAqBN,CAAAA,CAArB,MAAA,QAAiDM,CAAe,CAAC,CAAA,CCAjE,IAAqBL,CAAAA,CAArB,MAAA,QAA4CK,CAAe,CAAC,CAAA,CCA5D,IAAqBJ,CAAAA,CAArB,MAAA,QAAiDI,CAAe,CAAC,CAAA,CCAjE,IAAqBH,CAAAA,CAArB,MAAA,QAA8CG,CAAe,CAAC,CAAA,CCA9D,IAAqBF,CAAAA,CAArB,MAAA,QAAiDE,CAAe,CAAC,CAAA,CCAjE,IAAqBD,CAAAA,CAArB,MAAA,QAAyCC,CAAe,CAAC,CAAA,CCSzD,IAAqBR,CAAAA,CAArB,MAAA,QAAyCQ,CAAe,CAGtD,WAAA,CACEC,CAAAA,CACAG,CAAAA,CACAC,CAAAA,CACA,CACA,KAAA,CAAMJ,CAAO,CAAA,CACb,IAAA,CAAK,aAAA,CAAgBG,CAAAA,CACrB,IAAA,CAAK,OAAA,CAAUC,CACjB,CACF,CAAA,CXwFA,IAAqBC,CAAAA,CAArB,KAAmC,CAyBjC,WAAA,CAAYC,CAAAA,CAA+B,CACzC,IAAA,CAAK,KAAA,CAAQA,CAAAA,CAAQ,KAAA,EAAS,CAAC,CAAA,CAC/B,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,KAAA,CACf,GAAA,CAAKC,CAAAA,EAAS,IAAA,CAAK,oBAAA,CAAqBA,CAAI,CAAC,CAAA,CAC7C,GAAA,CAAKA,CAAAA,EAAS,IAAA,CAAK,oBAAA,CAAqBA,CAAI,CAAC,CAAA,CAC7C,GAAA,CAAKA,CAAAA,EAAAA,CAAU,CAAE,GAAGA,CAAK,CAAA,CAAE,CAAA,CAE1BD,CAAAA,CAAQ,cAAA,EAAkB,IAAA,EAAA,CAC5BA,CAAAA,CAAQ,cAAA,CAAiB,CAAA,CAAA,CAAA,CAGvBA,CAAAA,CAAQ,cAAA,GAAmB,CAAA,CAAA,EAC7B,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA,CAG9B,IAAA,CAAK,WAAA,CAAcA,CAAAA,CAAQ,WAAA,CAC3B,IAAA,CAAK,WAAA,CAAc,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,WAAW,CAAA,CAC7D,IAAA,CAAK,WAAA,CAAc,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,WAAW,CAAA,CAE7D,IAAA,CAAK,wBAAA,CACHA,CAAAA,CAAQ,wBAAA,EAA4BA,CAAAA,CAAQ,cAAA,EAAkB,CAAA,CAChE,IAAA,CAAK,0BAAA,CAA6BA,CAAAA,CAAQ,0BAAA,EAA8B,EAAA,CACxE,IAAA,CAAK,UAAA,CAAA,CACFA,CAAAA,CAAQ,UAAA,GAAe,KAAA,CAAA,EAAaA,CAAAA,CAAQ,UAAA,EAAc,CAAA,CACvDA,CAAAA,CAAQ,UAAA,CACR,IAAA,CAAK,KAAA,CAAM,MAAA,CAAA,CAAU,IAAA,CAAK,WAAA,EAAe,IAAA,CAAO,CAAA,CAAI,CAAA,CAAA,CAAA,EAAO,CAAA,CACjE,IAAA,CAAK,oBAAA,CAAuBA,CAAAA,CAAQ,oBAAA,EAAwB,EAAA,CAE5D,IAAA,CAAK,MAAA,CAASA,CAAAA,CAAQ,MAAA,CACtB,IAAA,CAAK,sBAAA,CAAyBA,CAAAA,CAAQ,sBAAA,CAEtC,IAAA,CAAK,4BAAA,CACHA,CAAAA,CAAQ,4BAAA,EAAgC,CAAA,CAC1C,IAAA,CAAK,wBAAA,CAA2BA,CAAAA,CAAQ,wBAAA,EAA4B,CAAA,CAAA,CAEpE,IAAA,CAAK,YAAA,CAAeA,CAAAA,CAAQ,YAAA,CAC5B,IAAA,CAAK,MAAA,CAASA,CAAAA,CAAQ,MAAA,EAAUE,kBAAAA,CAChC,IAAA,CAAK,QAAA,CAAWF,CAAAA,CAAQ,QAAA,EAAY,MAAA,CACpC,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,CAElC,IAAA,CAAK,iBAAA,CAAoBA,CAAAA,CAAQ,iBAAA,CAEjC,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAQ,SAAA,CACzB,IAAA,CAAK,UAAA,CAAaA,CAAAA,CAAQ,UAAA,CAE1B,IAAA,CAAK,gBAAA,CAAmBA,CAAAA,CAAQ,gBAAA,CAEhC,IAAA,CAAK,uBAAA,CAAwBA,CAAO,CAAA,CACpC,IAAA,CAAK,QAAA,CAAS,CAChB,CAEA,QAAA,CAAA,CAAoB,CAClB,EAAA,CAAI,IAAA,CAAK,KAAA,EAAS,IAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,GAAW,CAAA,EAAK,IAAA,CAAK,aAAA,CAAc,CAAA,CACtE,MAAM,IAAId,CAAAA,CACR,qEACF,CAAA,CAGF,EAAA,CACE,IAAA,CAAK,WAAA,EAAe,IAAA,EACpB,IAAA,CAAK,0BAAA,CAA2B,IAAA,CAAK,WAAW,CAAA,CAEhD,MAAM,IAAIA,CAAAA,CACR,oFACF,CAAA,CAGF,EAAA,CAAI,IAAA,CAAK,MAAA,EAAU,IAAA,CACjB,MAAM,IAAIA,CAAAA,CAA0B,2BAA2B,CAAA,CAGjE,MAAO,CAAA,CACT,CAEQ,aAAA,CAAA,CAAyB,CAC/B,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAMe,CAAAA,EACf,IAAA,CAAK,0BAAA,CAA2BA,CAAI,CAC5C,CACH,CAEQ,0BAAA,CACNA,CAAAA,CAIS,CACT,MACE,CAAC,CAAC,UAAA,CAAY,MAAA,CAAQ,MAAA,CAAQ,MAAM,CAAA,CAAE,KAAA,CAAOE,CAAAA,EACpCF,CAAAA,CAAK,cAAA,CAAeE,CAAG,CAC/B,CAAA,EAAKF,CAAAA,CAAK,GAAA,EAAU,IAEzB,CAEQ,oBAAA,CACNA,CAAAA,CASY,CACZ,OAAIA,CAAAA,EAAQ,IAAA,EAAQ,CAACA,CAAAA,CAAK,cAAA,CAAe,MAAM,CAAA,EAAA,CAC7CA,CAAAA,CAAK,IAAA,CAAU,EAAA,CAAA,CAEVA,CACT,CAEQ,oBAAA,CACNA,CAAAA,CASY,CACZ,EAAA,CACEA,CAAAA,EAAQ,IAAA,EACR,CAACA,CAAAA,CAAK,cAAA,CAAe,MAAM,CAAA,EAC3BA,CAAAA,CAAK,cAAA,CAAe,UAAU,CAAA,CAE9B,MAAA,CAAQA,CAAAA,CAAK,QAAA,CAAa,CACxB,IAAK,OAAA,CACHA,CAAAA,CAAK,IAAA,CAAU,GAAA,CACf,KAAA,CACF,IAAK,MAAA,CACHA,CAAAA,CAAK,IAAA,CAAU,EAAA,CACf,KACJ,CAEF,OAAOA,CACT,CAEQ,uBAAA,CAAwBD,CAAAA,CAAqC,CAC/DA,CAAAA,CAAQ,cAAA,EACV,IAAA,CAAK,MAAA,CAAO,IAAA,CACV,gFACF,CAAA,CAEEA,CAAAA,CAAQ,UAAA,EACV,IAAA,CAAK,MAAA,CAAO,IAAA,CACV,oGACF,CAAA,CAEEA,CAAAA,CAAQ,gBAAA,EACV,IAAA,CAAK,MAAA,CAAO,IAAA,CACV,0GACF,CAEJ,CAEQ,YAAA,CAAaI,CAAAA,CAAO,CAC1B,GAAA,CAAA,IAASC,CAAAA,CAAID,CAAAA,CAAM,MAAA,CAAS,CAAA,CAAGC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,EAAAA,CAAK,CACzC,IAAMC,CAAAA,CAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,CAAA,CAAA,CAAKD,CAAAA,CAAI,CAAA,CAAE,CAAA,CAC5C,CAACD,CAAAA,CAAMC,CAAC,CAAA,CAAGD,CAAAA,CAAME,CAAC,CAAC,CAAA,CAAI,CAACF,CAAAA,CAAME,CAAC,CAAA,CAAGF,CAAAA,CAAMC,CAAC,CAAC,CAC5C,CACF,CACF,CAAA,CYnSA,IAAAE,EAAAA,CAAmC,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CACnCC,EAAAA,CAAoC,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAFpC,4EAAkB,IAgBZC,EAAAA,CAAmB,qBAAA,CACnBC,EAAAA,CAAU,CAAA,CAAA,CACVC,EAAAA,CAAY,CAAA,CAAA,CAOZC,EAAAA,CACJ,OAAO,OAAA,CAAY,GAAA,EACnB,OAAA,CAAQ,QAAA,EAAY,IAAA,EACpB,OAAA,CAAQ,QAAA,CAAS,IAAA,EAAQ,IAAA,CAENC,CAAAA,CAArB,KAA6B,CAc3B,WAAA,CAAoBC,CAAAA,CAA8B,CAA9B,IAAA,CAAA,aAAA,CAAAA,CAAAA,CAClB,IAAA,CAAK,MAAA,CAAS,IAAA,CAAK,aAAA,CAAc,MAAA,CACjC,IAAA,CAAK,KAAA,CACH,IAAA,CAAK,aAAA,CAAc,KAAA,EAAS,IAAA,CACxB,IAAA,CAAK,aAAA,CAAc,KAAA,CACnB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,aAAA,CAAc,KAAK,CAAC,CAAA,CACzD,IAAA,CAAK,WAAA,CACH,IAAA,CAAK,aAAA,CAAc,WAAA,EAAe,IAAA,CAC9B,IAAA,CAAK,aAAA,CAAc,WAAA,CACnB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,aAAA,CAAc,WAAW,CAAC,CAAA,CAC/D,IAAA,CAAK,wBAAA,CAA2B,IAAA,CAAK,aAAA,CAAc,wBAAA,CACnD,IAAA,CAAK,0BAAA,CACH,IAAA,CAAK,aAAA,CAAc,0BAAA,CACrB,IAAA,CAAK,oBAAA,CAAuB,IAAA,CAAK,aAAA,CAAc,UAAA,CAC/C,IAAA,CAAK,oBAAA,CAAuB,IAAA,CAAK,aAAA,CAAc,oBAAA,CAC/C,IAAA,CAAK,sBAAA,CAAyB,IAAA,CAAK,aAAA,CAAc,sBAAA,CACjD,IAAA,CAAK,qBAAA,CAAwB,IAAA,CAAK,aAAA,CAAc,iBAAA,CAEhD,IAAA,CAAK,MAAA,CAAS,IAAA,CAAK,aAAA,CAAc,MAAA,CAEjC,IAAA,CAAK,0BAAA,CAA2B,CAAA,CAChC,IAAA,CAAK,gBAAA,CAAmB,CAAA,CAC1B,CAEA,MAAM,GAAA,CACJC,CAAAA,CACAC,CAAAA,CAAuB,CAAC,CAAA,CACxB,CACE,WAAA,CAAAC,CAAAA,CAAc,IAAA,CACd,YAAA,CAAAC,CAAAA,CAAe,KAAA,CACjB,CAAA,CAGI,CAAC,CAAA,CACO,CACZ,OAAO,IAAA,CAAK,cAAA,CAAkB,KAAA,CAAOH,CAAAA,CAAU,CAC7C,eAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CACF,CAAC,CACH,CAEA,MAAM,MAAA,CAAUH,CAAAA,CAAkBC,CAAAA,CAAuB,CAAC,CAAA,CAAe,CACvE,OAAO,IAAA,CAAK,cAAA,CAAkB,QAAA,CAAUD,CAAAA,CAAU,CAAE,eAAA,CAAAC,CAAgB,CAAC,CACvE,CAEA,MAAM,IAAA,CACJD,CAAAA,CACAI,CAAAA,CAAsB,CAAC,CAAA,CACvBH,CAAAA,CAAuB,CAAC,CAAA,CACxBI,CAAAA,CAAyB,CAAC,CAAA,CACd,CACZ,OAAO,IAAA,CAAK,cAAA,CAAkB,MAAA,CAAQL,CAAAA,CAAU,CAC9C,eAAA,CAAAC,CAAAA,CACA,cAAA,CAAAG,CAAAA,CACA,iBAAA,CAAAC,CACF,CAAC,CACH,CAEA,MAAM,GAAA,CACJL,CAAAA,CACAI,CAAAA,CAAsB,CAAC,CAAA,CACvBH,CAAAA,CAAuB,CAAC,CAAA,CACZ,CACZ,OAAO,IAAA,CAAK,cAAA,CAAkB,KAAA,CAAOD,CAAAA,CAAU,CAC7C,eAAA,CAAAC,CAAAA,CACA,cAAA,CAAAG,CACF,CAAC,CACH,CAEA,MAAM,KAAA,CACJJ,CAAAA,CACAI,CAAAA,CAAsB,CAAC,CAAA,CACvBH,CAAAA,CAAuB,CAAC,CAAA,CACZ,CACZ,OAAO,IAAA,CAAK,cAAA,CAAkB,OAAA,CAASD,CAAAA,CAAU,CAC/C,eAAA,CAAAC,CAAAA,CACA,cAAA,CAAAG,CACF,CAAC,CACH,CAEQ,UAAA,CAAA,CAAuC,CAC7C,OAAK,IAAA,CAAK,aAAA,CAAc,YAAA,CAEpB,OAAO,IAAA,CAAK,aAAA,CAAc,YAAA,EAAiB,UAAA,CACtC,IAAA,CAAK,aAAA,CAAc,YAAA,CAG1B,OAAO,SAAA,CAAc,GAAA,EACrB,SAAA,CAAU,SAAA,GAAc,oBAAA,CAGtBE,eAAAA,CAAM,UAAA,CAAW,IAAA,CAAK,aAAA,CAAc,YAAY,CAAA,CAAE,IAAA,CAAK,UAAU,CAAA,CACjEA,eAAAA,CAAM,UAAA,CAAW,IAAA,CAAK,aAAA,CAAc,YAAY,CAAA,CAXd,KAAA,CAYxC,CAEA,MAAM,cAAA,CACJC,CAAAA,CACAP,CAAAA,CACA,CACE,eAAA,CAAAC,CAAAA,CAAkB,IAAA,CAClB,cAAA,CAAAG,CAAAA,CAAiB,IAAA,CACjB,iBAAA,CAAAC,CAAAA,CAAoB,CAAC,CAAA,CACrB,WAAA,CAAAH,CAAAA,CAAc,IAAA,CACd,YAAA,CAAAC,CAAAA,CAAe,KAAA,CAAA,CACf,qBAAA,CAAAK,CAAAA,CAAwB,CAAA,CAAA,CACxB,eAAA,CAAAC,CAAAA,CAAkB,KAAA,CACpB,CAAA,CASY,CACZ,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,CAAA,CAE5B,IAAMC,CAAAA,CAAgB,IAAA,CAAK,GAAA,CAAI,CAAA,CAC3BC,CAAAA,CACAC,CAAAA,CAAa,CAAA,CAAA,CACjB,IAAA,CAAK,MAAA,CAAO,KAAA,CACV,CAAA,SAAA,EAAYF,CAAa,CAAA,aAAA,EAAgBH,CAAAA,CAAY,WAAA,CAAY,CAAC,CAAA,UAAA,EAAaP,CAAQ,CAAA,CAAA;ACmO3D;AAAA;AAAA;AAAA;AA4BnB,UAAA;AA+CF;AC7cH","file":"/home/fanis/code/typesense/js-lib/lib/Typesense.min.js","sourcesContent":[null,"module.exports = {}","module.exports = {}","module.exports = {}","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n"]} \ No newline at end of file diff --git a/lib/Typesense.min.mjs b/lib/Typesense.min.mjs index e73d15fa..c303ec55 100644 --- a/lib/Typesense.min.mjs +++ b/lib/Typesense.min.mjs @@ -1,9 +1,9 @@ -var _e=Object.defineProperty;var Ae=(i,e)=>{for(var t in e)_e(i,t,{get:e[t],enumerable:!0})};import be from"loglevel";var he={};Ae(he,{HTTPError:()=>S,ImportError:()=>f,MissingConfigurationError:()=>u,ObjectAlreadyExists:()=>v,ObjectNotFound:()=>g,ObjectUnprocessable:()=>P,RequestMalformed:()=>R,RequestUnauthorized:()=>_,ServerError:()=>A,TypesenseError:()=>a});var a=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}};var S=class extends a{};var u=class extends a{};var v=class extends a{};var g=class extends a{};var P=class extends a{};var R=class extends a{};var _=class extends a{};var A=class extends a{};var f=class extends a{constructor(e,t){super(e),this.importResults=t}};var b=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=e.numRetries||this.nodes.length+(this.nearestNode==null?0:1)||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.logger=e.logger||be,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new u("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new u("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new u("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let r=Math.floor(Math.random()*(t+1));[e[t],e[r]]=[e[r],e[t]]}}};import fe from"axios";import{Agent as xe}from"http";import{Agent as Te}from"https";var Ee="X-TYPESENSE-API-KEY",de=!0,we=!1,ye=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,x=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:r=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:r,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},r={},s={}){return this.performRequest("post",e,{queryParameters:r,bodyParameters:t,additionalHeaders:s})}async put(e,t={},r={}){return this.performRequest("put",e,{queryParameters:r,bodyParameters:t})}async patch(e,t={},r={}){return this.performRequest("patch",e,{queryParameters:r,bodyParameters:t})}async performRequest(e,t,{queryParameters:r=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:o=null,responseType:I=void 0,skipConnectionTimeout:h=!1,enableKeepAlive:y=void 0}){this.configuration.validate();let c=Date.now(),C;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let K=1;K<=this.numRetriesPerRequest+1;K++){let d=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${K} to Node ${d.index}`),o&&o.aborted)return Promise.reject(new Error("Request aborted by caller."));let z;try{let l={method:e,url:this.uriFor(t,d),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:I,validateStatus:W=>W>0,transformResponse:[(W,F)=>{let ge=W;return F!==void 0&&typeof W=="string"&&F["content-type"]&&F["content-type"].startsWith("application/json")&&(ge=JSON.parse(W)),ge}]};if(h!==!0&&(l.timeout=this.connectionTimeoutSeconds*1e3),r&&Object.keys(r).length!==0&&(l.params=r),this.sendApiKeyAsQueryParam&&(l.params=l.params||{},l.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),l.httpAgent=this.configuration.httpAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),l.httpAgent=new xe({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),l.httpsAgent=this.configuration.httpsAgent):y===!0&&(ye?(this.logger.debug(`Request #${c}: Enabling keepAlive`),l.httpsAgent=new Te({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),l.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(l.data=s),o){let F=fe.CancelToken.source();z=()=>F.cancel(),o.addEventListener("abort",z),l.cancelToken=F.token}let m=await fe(l);if(m.status>=1&&m.status<=499&&this.setNodeHealthcheck(d,de),this.logger.debug(`Request #${c}: Request to Node ${d.index} was made. Response Code was ${m.status}.`),m.status>=200&&m.status<300)return Promise.resolve(m.data);if(m.status<500)return Promise.reject(this.customErrorForResponse(m,m.data?.message));throw this.customErrorForResponse(m,m.data?.message)}catch(l){this.setNodeHealthcheck(d,we),C=l,this.logger.warn(`Request #${c}: Request to Node ${d.index} failed due to "${l.code} ${l.message}${l.response==null?"":" - "+JSON.stringify(l.response?.data)}"`),this.logger.warn(`Request #${c}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`),await this.timer(this.retryIntervalSeconds)}finally{o&&z&&o.removeEventListener("abort",z)}}return this.logger.debug(`Request #${c}: No retries left. Raising last error`),Promise.reject(C)}getNextNode(e=0){if(this.nearestNode!=null){if(this.logger.debug(`Request #${e}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy===!0?"Healthy":"Unhealthy"}`),this.nearestNode.isHealthy===!0||this.nodeDueForHealthcheck(this.nearestNode,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${this.nearestNode.index}`),this.nearestNode;this.logger.debug(`Request #${e}: Falling back to individual nodes`)}this.logger.debug(`Request #${e}: Nodes Health: ${this.nodes.map(r=>`Node ${r.index} is ${r.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let r=0;r<=this.nodes.length;r++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let r=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return r&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),r}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,de)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,de)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ee]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t){let r=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(r+=` | Server said: ${t}`);let s=new a(r);return e.status===400?s=new R(r):e.status===401?s=new _(r):e.status===404?s=new g(r):e.status===409?s=new v(r):e.status===422?s=new P(r):e.status>=500&&e.status<=599?s=new A(r):s=new S(r),s.httpStatus=e.status,s}};var ue="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(ue,e,t)}async retrieve(e={}){return this.apiCall.get(ue,e)}static get RESOURCEPATH(){return ue}};var T=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,r,s){let{cacheResponseForSeconds:n=120,maxSize:o=100}=s;if(n<=0||o<=0)return t.call(e,...r);let h=JSON.stringify(r),y=this.responseCache.get(h),c=Date.now();if(y){if(c-y.requestTimestampo){let m=this.responseCache.keys().next().value;this.responseCache.delete(m)}if(this.responsePromiseCache.size>o){let m=this.responsePromiseCache.keys().next().value;this.responsePromiseCache.delete(m)}return d}};var Ce="/documents",j=class{constructor(e,t,r){this.collectionName=e;this.apiCall=t;this.configuration=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:r=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);for(let o in e)Array.isArray(e[o])&&(s[o]=e[o].join(","));let n=Object.assign({},e,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),n,{abortSignal:r}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ce}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ce}};var Se=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,E=class extends j{constructor(e,t,r){super(e,t,r)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let r;if(Array.isArray(e))try{r=e.map(n=>JSON.stringify(n)).join(` +var Ke=Object.create;var fe=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var ye=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ze=(r,e)=>{for(var t in e)fe(r,t,{get:e[t],enumerable:!0})},Le=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of We(e))!je.call(r,s)&&s!==t&&fe(r,s,{get:()=>e[s],enumerable:!(i=Me(e,s))||i.enumerable});return r};var ge=(r,e,t)=>(t=r!=null?Ke(Fe(r)):{},Le(e||!r||!r.__esModule?fe(t,"default",{value:r,enumerable:!0}):t,r));var _e=ye((jt,xe)=>{"use strict";xe.exports={}});var be=ye((zt,Ae)=>{"use strict";Ae.exports={}});var $e=ye((Yr,He)=>{"use strict";He.exports={}});import Qe from"loglevel";var Re={};ze(Re,{HTTPError:()=>R,ImportError:()=>g,MissingConfigurationError:()=>f,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>y,ObjectUnprocessable:()=>_,RequestMalformed:()=>A,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype)}};var R=class extends l{};var f=class extends l{};var x=class extends l{};var y=class extends l{};var _=class extends l{};var A=class extends l{};var b=class extends l{};var T=class extends l{};var g=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==void 0&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||Qe,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new f("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new f("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new f("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}};var Ee=ge(_e()),we=ge(be());import pe from"axios";var Je="X-TYPESENSE-API-KEY",Ce=!0,Be=!1,Te=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:i=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},s={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:s})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?pe.getAdapter(this.configuration.axiosAdapter).bind(globalThis):pe.getAdapter(this.configuration.axiosAdapter):void 0}async performRequest(e,t,{queryParameters:i=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:a=null,responseType:h=void 0,skipConnectionTimeout:m=!1,enableKeepAlive:C=void 0}){this.configuration.validate();let c=Date.now(),S,F=!1;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:j=>j>0,transformResponse:[(j,z)=>{let Pe=j;return z!==void 0&&typeof j=="string"&&z["content-type"]&&z["content-type"].startsWith("application/json")&&(Pe=JSON.parse(j)),Pe}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new Ee.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new we.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(o.data=s),a){let z=pe.CancelToken.source();Q=()=>{F=!0,z.cancel()},a.addEventListener("abort",Q),o.cancelToken=z.token}let d=await pe(o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Ce),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,d.data?.message,o.data));throw this.customErrorForResponse(d,d.data?.message,o.data)}catch(o){if(F||this.setNodeHealthcheck(P,Be),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${o?.code??""} ${o.message}${o.response==null?"":" - "+JSON.stringify(o.response?.data)}"`),F)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Ce)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Ce)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Je]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let s=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(s+=` | Server said: ${t}`);let n=new l(s,i,e.status);return e.status===400?n=new A(s):e.status===401?n=new b(s):e.status===404?n=new y(s):e.status===409?n=new x(s):e.status===422?n=new _(s):e.status>=500&&e.status<=599?n=new T(s):n=new R(s),n}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,i,s){let{cacheResponseForSeconds:n=120,maxSize:a=100}=s;if(n<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o)}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o)}return v}};var Se="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(Se,e,t)}async retrieve(e={}){return this.apiCall.get(Se,e)}static get RESOURCEPATH(){return Se}};var Oe="/documents",L=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);let n=u(e),a=Object.assign({},s,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Oe}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var ve={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},Ne=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,N=class extends L{constructor(e,t,i){super(e,t,i)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(n=>JSON.stringify(n)).join(` `)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object - Please try reducing the number of keys in your document, or using CURL to import your data. - `):new Error(n)}else r=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:r,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se});if(Array.isArray(e)){let n=s.split(` -`).map(I=>JSON.parse(I)),o=n.filter(I=>I.success===!1);if(o.length>0)throw new f(`${n.length-o.length} documents imported successfully, ${o.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n);return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Se})).split(` -`).map(o=>JSON.parse(o)),n=s.filter(o=>o.success===!1);if(n.length>0)throw new f(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s);return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};var Oe="/overrides",w=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var L=class{constructor(e,t,r){this.collectionName=e;this.overrideId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${w.RESOURCEPATH}/${this.overrideId}`}};var Ne="/synonyms",O=class i{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ne}};var Q=class{constructor(e,t,r){this.collectionName=e;this.synonymId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${O.RESOURCEPATH}/${this.synonymId}`}};var pe=class{constructor(e,t,r){this.collectionName=e;this.documentId=t;this.apiCall=r}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${this.collectionName}${E.RESOURCEPATH}/${this.documentId}`}};var J=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=r,this._documents=new E(this.name,this.apiCall,this.configuration),this._overrides=new w(this.name,this.apiCall),this._synonyms=new O(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof g)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new pe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new L(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new Q(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${this.name}`}};var ve="/aliases",N=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(ve)}endpointPath(e){return`${i.RESOURCEPATH}/${e}`}static get RESOURCEPATH(){return ve}};var B=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${N.RESOURCEPATH}/${this.name}`}};import{createHmac as He}from"crypto";var Pe="/keys",H=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(i.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Pe)}generateScopedSearchKey(e,t){let r=JSON.stringify(t),s=Buffer.from(He("sha256",e).update(r).digest("base64")),n=e.substr(0,4),o=`${s}${n}${r}`;return Buffer.from(o).toString("base64")}static get RESOURCEPATH(){return Pe}};var Y=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${H.RESOURCEPATH}/${this.id}`}};var De="/debug",V=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(De)}};var $e="/metrics.json",G=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get($e)}};var Ue="/stats.json",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ue)}};var qe="/health",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(qe)}};var ke="/operations",ee=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ke}/${e}`,{},t)}};var Me="/multi_search",D=class{constructor(e,t,r=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=r;this.requestWithCache=new T}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:r=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let o=Object.assign({},t,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Me,e,o,s],{cacheResponseForSeconds:r})}};var Ie="/presets",$=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ie}};var te=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${this.presetId}`}};var Ke="/analytics/rules",U=class i{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ke}};var re=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${U.RESOURCEPATH}/${this.name}`}};var We="/analytics/events",ie=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return We}};var Fe="/analytics",se=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new U(this.apiCall),this._analyticsEvents=new ie(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new re(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return Fe}};var je="/stopwords",q=class i{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return je}};var ne=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${this.stopwordId}`}};var ze="/conversations/models",k=class i{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${i.RESOURCEPATH}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return ze}};var oe=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${this.id}`}};var Re="/conversations",M=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new k(this.apiCall)}async retrieve(){return this.apiCall.get(Re)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new oe(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return Re}};var ae=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${this.id}`}};var le=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new b(e),this.apiCall=new x(this.configuration),this.debug=new V(this.apiCall),this.metrics=new G(this.apiCall),this.stats=new X(this.apiCall),this.health=new Z(this.apiCall),this.operations=new ee(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new N(this.apiCall),this.individualAliases={},this._keys=new H(this.apiCall),this.individualKeys={},this._presets=new $(this.apiCall),this.individualPresets={},this._stopwords=new q(this.apiCall),this.individualStopwords={},this.analytics=new se(this.apiCall),this._conversations=new M(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new J(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new B(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new Y(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new te(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ne(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ae(e,this.apiCall)),this.individualConversations[e])}};var me=class{constructor(e,t,r){this.name=e;this.apiCall=t;this.configuration=r;this._documents=new j(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ce=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new b(e),this.apiCall=new x(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var $i={Client:le,SearchClient:ce,Errors:he};export{le as Client,he as Errors,ce as SearchClient,$i as default}; + Please try reducing the number of keys in your document, or using CURL to import your data. + `):new Error(n)}else i=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne});if(Array.isArray(e)){let n=s.split(` +`).map(h=>JSON.parse(h)),a=n.filter(h=>h.success===!1);if(a.length>0)throw new g(`${n.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:n.length-a.length});return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne})).split(` +`).map(a=>JSON.parse(a)),n=s.filter(a=>a.success===!1);if(n.length>0)throw new g(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:e,options:t,failedItems:n,successCount:s.length-n.length});return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function De(r){return Object.keys(ve).filter(e=>r[e]!==void 0).every(e=>Ve(r[e]))}function u(r){let e={...r};if(!Object.keys(ve).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&De(e))return e;if(!De(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Ve(r){return!Array.isArray(r)}var Ye="/multi_search",D=class{constructor(e,t,i=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let a={...t,...n},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ye,h,m,s],{cacheResponseForSeconds:i})}};var me=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new L(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var de=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Ge="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ge}};var J=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var Xe="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Xe}};var B=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var he=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${N.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var V=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new N(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof y)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new he(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new J(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new B(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ue="/aliases",$=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(Ue)}endpointPath(e){return`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ue}};var Y=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ie=ge($e());var qe="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(qe)}generateScopedSearchKey(e,t){let i=u(t),s=JSON.stringify(i),n=Buffer.from((0,Ie.createHmac)("sha256",e).update(s).digest("base64")),a=e.substr(0,4),h=`${n}${a}${s}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var Ze="/debug",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ze)}};var et="/metrics.json",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(et)}};var tt="/stats.json",ee=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(tt)}};var rt="/health",te=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(rt)}};var it="/operations",re=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${it}/${e}`,{},t)}};var st="/presets",I=class r{constructor(e){this.apiCall=e}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let s=t.value.searches.map(n=>u(n));return this.apiCall.put(this.endpointPath(e),{value:{searches:s}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return st}};var ie=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var nt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return nt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ot="/analytics/events",ne=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ot}};var at="/analytics",oe=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new ne(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return at}};var lt="/stopwords",K=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var ae=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var ct="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var le=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ke="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall)}async retrieve(){return this.apiCall.get(ke)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new le(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return ke}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ue=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new X(this.apiCall),this.metrics=new Z(this.apiCall),this.stats=new ee(this.apiCall),this.health=new te(this.apiCall),this.operations=new re(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new oe(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new V(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new Y(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new G(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new ie(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ae(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ce(e,this.apiCall)),this.individualConversations[e])}};export{ue as Client,Re as Errors,de as SearchClient}; //# sourceMappingURL=Typesense.min.mjs.map \ No newline at end of file diff --git a/lib/Typesense.min.mjs.map b/lib/Typesense.min.mjs.map index bbe62e0b..9f18da6b 100644 --- a/lib/Typesense.min.mjs.map +++ b/lib/Typesense.min.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Collections.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/Client.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense.ts"],"sourcesContent":["import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n options.numRetries ||\n this.nodes.length + (this.nearestNode == null ? 0 : 1) ||\n 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string) {\n super(message);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport { ImportResponse } from \"../Documents\";\n\nexport default class ImportError extends TypesenseError {\n importResults: ImportResponse[];\n constructor(message: string, importResults: ImportResponse[]) {\n super(message);\n this.importResults = importResults;\n }\n}\n","import axios, { AxiosRequestConfig, AxiosResponse, Method } from \"axios\";\nimport { Logger } from \"loglevel\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => source.cancel();\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(response, response.data?.message),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(response, response.data?.message);\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n this.setNodeHealthcheck(node, UNHEALTHY);\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error.code} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n error.httpStatus = response.status;\n\n return error;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n this.responseCache.delete(oldestEntry);\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n this.responsePromiseCache.delete(oldestEntry);\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n for (const key in searchParameters) {\n if (Array.isArray(searchParameters[key])) {\n additionalQueryParams[key] = searchParameters[key].join(\",\");\n }\n }\n const queryParams = Object.assign(\n {},\n searchParameters,\n additionalQueryParams\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\ntype OperationMode = \"off\" | \"always\" | \"fallback\";\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n q?: string;\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: string; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: string; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Overrides.RESOURCEPATH}/${this.overrideId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + operation}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Synonyms.RESOURCEPATH}/${this.synonymId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${Documents.RESOURCEPATH}/${this.documentId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${aliasName}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${this.name}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const paramsJSON = JSON.stringify(parameters);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(private id: number, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | string,\n queryParameters: Record = {}\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const queryParams = Object.assign({}, commonParams, additionalQueryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [RESOURCEPATH, searchRequests, queryParams, additionalHeaders],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds }\n ) as Promise>;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema\n ): Promise {\n return this.apiCall.put(this.endpointPath(presetId), params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${this.presetId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${this.name}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${this.stopwordId}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${this.id}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${this.id}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import Client from \"./Typesense/Client\";\nimport SearchClient from \"./Typesense/SearchClient\";\nimport * as Errors from \"./Typesense/Errors\";\n\nexport { Client, SearchClient, Errors };\nexport default { Client, SearchClient, Errors };\n"],"mappings":"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","names":["logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","axios","HTTPAgent","HTTPSAgent","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","source","axios","response","error","candidateNode","i","isDueForHealthcheck","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RESOURCEPATH","Collections","apiCall","schema","options","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","key","queryParams","operation","Collections","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","createHmac","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","Typesense_default","Client","SearchClient","Errors_exports"]} \ No newline at end of file +{"version":3,"sources":["node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/Collections.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Utils.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/Client.ts"],"sourcesContent":["module.exports = {}","module.exports = {}","module.exports = {}","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"],"mappings":"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","names":["require_http","__commonJSMin","exports","module","require_https","__commonJSMin","exports","module","require_crypto","__commonJSMin","exports","module","logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","httpBody","httpStatus","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","payload","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","import_http","import_https","axios","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","HTTPAgent","HTTPSAgent","source","response","error","candidateNode","isDueForHealthcheck","i","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","httpBody","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","Collections","apiCall","schema","options","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","normalizedParams","normalizeArrayableParams","queryParams","operation","Collections","arrayableParams","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","hasNoArrayValues","params","arrayableParams","key","isNonArrayValue","normalizeArrayableParams","result","value","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","normalizedSearchRequests","normalizeArrayableParams","normalizedQueryParams","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","options","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","import_crypto","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","normalizedParams","normalizeArrayableParams","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","normalizedParams","search","normalizeArrayableParams","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation"]} \ No newline at end of file From 8dea7d5db015d1af6856206a6f2058fa0efc803b Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Thu, 6 Feb 2025 11:18:16 +0200 Subject: [PATCH 13/45] chore: remove typesense-data from source control --- .gitignore | 3 +- typesense-data/db/000009.sst | Bin 2067 -> 0 bytes typesense-data/db/CURRENT | 1 - typesense-data/db/IDENTITY | 1 - typesense-data/db/LOCK | 0 typesense-data/db/LOG | 721 ------------------ typesense-data/db/MANIFEST-000005 | Bin 178 -> 0 bytes typesense-data/db/OPTIONS-000007 | 199 ----- typesense-data/meta/CURRENT | 1 - typesense-data/meta/IDENTITY | 1 - typesense-data/meta/LOCK | 0 typesense-data/meta/LOG | 683 ----------------- typesense-data/meta/MANIFEST-000005 | Bin 59 -> 0 bytes typesense-data/meta/OPTIONS-000007 | 199 ----- .../log/log_inprogress_00000000000000000001 | Bin 890 -> 0 bytes typesense-data/state/log/log_meta | Bin 6 -> 0 bytes typesense-data/state/meta/raft_meta | Bin 28 -> 0 bytes .../__raft_snapshot_meta | Bin 150 -> 0 bytes .../db_snapshot/000009.sst | Bin 2067 -> 0 bytes .../db_snapshot/CURRENT | 1 - .../db_snapshot/MANIFEST-000005 | Bin 178 -> 0 bytes .../db_snapshot/OPTIONS-000007 | 199 ----- 22 files changed, 2 insertions(+), 2007 deletions(-) delete mode 100644 typesense-data/db/000009.sst delete mode 100644 typesense-data/db/CURRENT delete mode 100644 typesense-data/db/IDENTITY delete mode 100644 typesense-data/db/LOCK delete mode 100644 typesense-data/db/LOG delete mode 100644 typesense-data/db/MANIFEST-000005 delete mode 100644 typesense-data/db/OPTIONS-000007 delete mode 100644 typesense-data/meta/CURRENT delete mode 100644 typesense-data/meta/IDENTITY delete mode 100644 typesense-data/meta/LOCK delete mode 100644 typesense-data/meta/LOG delete mode 100644 typesense-data/meta/MANIFEST-000005 delete mode 100644 typesense-data/meta/OPTIONS-000007 delete mode 100644 typesense-data/state/log/log_inprogress_00000000000000000001 delete mode 100644 typesense-data/state/log/log_meta delete mode 100644 typesense-data/state/meta/raft_meta delete mode 100644 typesense-data/state/snapshot/snapshot_00000000000000000002/__raft_snapshot_meta delete mode 100644 typesense-data/state/snapshot/snapshot_00000000000000000002/db_snapshot/000009.sst delete mode 100644 typesense-data/state/snapshot/snapshot_00000000000000000002/db_snapshot/CURRENT delete mode 100644 typesense-data/state/snapshot/snapshot_00000000000000000002/db_snapshot/MANIFEST-000005 delete mode 100644 typesense-data/state/snapshot/snapshot_00000000000000000002/db_snapshot/OPTIONS-000007 diff --git a/.gitignore b/.gitignore index b6a47bef..b11eedfe 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ typesense-server-nodes *.log .DS_Store test-results.xml -test-files \ No newline at end of file +test-files +typesense-data diff --git a/typesense-data/db/000009.sst b/typesense-data/db/000009.sst deleted file mode 100644 index 27d83971906e806b3b136283b33817cf96c846db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2067 zcmc&#&ub(_6z-Z#GCj#;lG!l}2E@?hIMbw)*-U0)l-=we0;?-4%d&(}RCm9g6zLz6 zs+!F7hIkVM5%CZ3Ab9iQLGYvpFM^lg*_(fW7Z<##uexV4i3h>;V8i^VSMR-g@74Ex zZ7j6c?;VgiBYV!R(*X>?r$fONNUOWiuml7kAohTsTHV7VZ8)U@B#l_#>c)dGydd*r z|9}+p98RJB-Q3&MOQJrDIY=@y$?XYX3X?Nsb)ELsPWw)K+vzkc9|ATA6_trlJnqqe zL+D#wD;`7?qJEg9fVDI%h?yG#jX~-xnHQEAuuww7!k^G(-brq!D(wTNz^IAe;W_$v zfM<^*cMAk7a2^L77vrrk@mM&Hk6EPu<^7~ITQ;n`h^v64uXqx(@X8=q+ygp3 zVw_d?cjbURL^l@H=U$dXq*>l^nYmB0yE7mfec%-<*b^4;Xsy<9UqR$H6b zdzoCtzq^+~tZ-!i`;{OwIHDFAa|1ER09_kGIf5t=DV4`e_=ww9!;)#_CZVJ%nIJ{; zOC=`|Qwe=07(xJD505Si_2PTiI913wHTfp`&nJzy{xBBT_pkXGKbG`Pw*BDyh0l$Z z+WO;%)R=4f)&0E+U7FR~hH=CACqCMkMXkLC?;Gnyk$5N4cWoD$abmknf^RF$MmvMJ zt>LL-R+mX11%r?5fQJe+ST|PdWO$sQ>j|V&vtuq3F9`=xYzHjjVQO>VxLqvi;f)1h z-dsfu$%YWZ8ES%S-%Aw?xrBYKF4<0{w1{FPk$vwZ+B#m;%})u=ny%m4Y`R_m zUdM46xEr;_%5fsqG^Q2ofVaI9bik=CzasNVOt%j@k9Hp4fBNLv*8PXhyH6jq_nm5K zHi>P;BlzvhkH4KW%LSh)W=sAYE=%PF0wJKh>dTVEyfusW2zI92IN~hqs~<3I!6bOS zS(GtfC8IpT4k7NTW23xC5)m2a3i3mo|<@=p#tANc73CS8tOu77h?k z()J<5g7B4-_}~+>N+J+Fu#-NZs`}EX&(x3?PYz?7 z2+md@2WKl)l0%Y?EkV{ zu9U`LhY`ZV!y0T2U;R$(D=}Xy=#o`xBhEw6+w$HKHo))n#kBFlxHd||$rGioyvM&>UXY~k0EqZ#-relm4lsiDzKbP2qF4<%$0f z1pFWZ2$}>4BEl&Uy5HI2&%YyC-z*xv-_t%s2l(p4n`F=8vcM*@u_cpFaNi_VdY8MDY^QWwgXB zMG+mZbV{1d=Ti~8`t=BXz4`He2N!M81A|?zgWHpX7LCk-1v#wSW-GLkHiz&erBt#m ze3S)mj^aVEyIbA!i5GgF>$m^N))}R%9D?B(ds8CeM@fsNflP?ldPElkg+k0?cLeYh6?FR9y#D_zJ-U{MH-bfOSW_&@Z$w!(OXg0dt=5srq_jhcOb{pB-%_51mY!$v(+=lIP4iph$u HP(p{lVc7`- diff --git a/typesense-data/state/log/log_meta b/typesense-data/state/log/log_meta deleted file mode 100644 index fd18fc2289d39fd4133cabc76b32a729e2397ad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6 NcmZQzU|`~41ONaX01N;C diff --git a/typesense-data/state/meta/raft_meta b/typesense-data/state/meta/raft_meta deleted file mode 100644 index 4f06a9e429d69f667e2ea3762e1239db5d43dbf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28 gcmZQzV36Qo5)v^qH_|gS*E7&Fva&EVFb5G905Bs2OaK4? diff --git a/typesense-data/state/snapshot/snapshot_00000000000000000002/__raft_snapshot_meta b/typesense-data/state/snapshot/snapshot_00000000000000000002/__raft_snapshot_meta deleted file mode 100644 index d5483116f777e99156e64bea312164cc7ace3aa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmZQzV3@=u#la-NBqd^KZlq^uu4kZUWMyG!U=AWIgrvB{Qj+3}^AZb+GxAIH4M4zB zuei8Gh(So4OBh+sIW#E9)h`4nAZ3;V8i^VSMR-g@74Ex zZ7j6c?;VgiBYV!R(*X>?r$fONNUOWiuml7kAohTsTHV7VZ8)U@B#l_#>c)dGydd*r z|9}+p98RJB-Q3&MOQJrDIY=@y$?XYX3X?Nsb)ELsPWw)K+vzkc9|ATA6_trlJnqqe zL+D#wD;`7?qJEg9fVDI%h?yG#jX~-xnHQEAuuww7!k^G(-brq!D(wTNz^IAe;W_$v zfM<^*cMAk7a2^L77vrrk@mM&Hk6EPu<^7~ITQ;n`h^v64uXqx(@X8=q+ygp3 zVw_d?cjbURL^l@H=U$dXq*>l^nYmB0yE7mfec%-<*b^4;Xsy<9UqR$H6b zdzoCtzq^+~tZ-!i`;{OwIHDFAa|1ER09_kGIf5t=DV4`e_=ww9!;)#_CZVJ%nIJ{; zOC=`|Qwe=07(xJD505Si_2PTiI913wHTfp`&nJzy{xBBT_pkXGKbG`Pw*BDyh0l$Z z+WO;%)R=4f)&0E+U7FR~hH=CACqCMkMXkLC?;Gnyk$5N4cWoD$abmknf^RF$MmvMJ zt>LL-R+mX11%r?5fQJe+ST|PdWO$sQ>j|V&vtuq3F9`=xYzHjjVQO>VxLqvi;f)1h z-dsfu$%YWZ8ES%S-%Aw?xrBYKF4<0{w1{FPk$vwZ+B#m;%})u=ny%m4Y`R_m zUdM46xEr;_%5fsqG^Q2ofVaI9bik=CzasNVOt%j@k9Hp4fBNLv*8PXhyH6jq_nm5K zHi>P;BlzvhkH4KW%LSh)W=sAYE=%PF0wJKh>dTVEyfusW2zI92IN~hqs~<3I!6bOS zS(GtfC8IpT4k7NTW23xC5)m2a3i3mo|<@=p#tANc73CS8tOu77h?k z()J<5g7B4-_}~+>N+J+Fu#-NZs`}EX&(x3?PYz?7 z2+md@2WKl)l0%Y?EkV{ zu9U`LhY`ZV!y0T2U;R$(D=}Xy=#o`xBhEw6+w$HKHo))n#kBFlxHd||$rGioyvM&>UXY~k0EqZ#-relm4lsiDzKbP2qF4<%$0f z1pFWZ2$ Date: Mon, 3 Feb 2025 16:07:49 +0200 Subject: [PATCH 14/45] feat(multi-search): add union parameter to multisearch --- src/Typesense/MultiSearch.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Typesense/MultiSearch.ts b/src/Typesense/MultiSearch.ts index cb825154..ca092e03 100644 --- a/src/Typesense/MultiSearch.ts +++ b/src/Typesense/MultiSearch.ts @@ -23,6 +23,7 @@ export interface MultiSearchRequestWithPresetSchema } export interface MultiSearchRequestsSchema { + union?: true; searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; } From 5663223b7ccdf94f40193153dd5522457921e4cd Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Mon, 3 Feb 2025 16:39:10 +0200 Subject: [PATCH 15/45] feat(client): add stemming dictionaries support - add `Stemming`, `StemmingDictionaries`, and `StemmingDictionary` classes - implement dictionary CRUD operations with `upsert` and `retrieve` methods - add stemming property to main client class - add tests for stemming functionality --- src/Typesense/Client.ts | 3 + src/Typesense/Stemming.ts | 38 +++++++++ src/Typesense/StemmingDicitonary.ts | 6 ++ src/Typesense/StemmingDictionaries.ts | 43 ++++++++++ src/Typesense/StemmingDictionary.ts | 26 ++++++ test/Typesense/StemmingDictionaries.spec.js | 95 +++++++++++++++++++++ test/Typesense/StemmingDictionary.spec.js | 64 ++++++++++++++ 7 files changed, 275 insertions(+) create mode 100644 src/Typesense/Stemming.ts create mode 100644 src/Typesense/StemmingDicitonary.ts create mode 100644 src/Typesense/StemmingDictionaries.ts create mode 100644 src/Typesense/StemmingDictionary.ts create mode 100644 test/Typesense/StemmingDictionaries.spec.js create mode 100644 test/Typesense/StemmingDictionary.spec.js diff --git a/src/Typesense/Client.ts b/src/Typesense/Client.ts index 3d16d8f1..b392759a 100644 --- a/src/Typesense/Client.ts +++ b/src/Typesense/Client.ts @@ -21,6 +21,7 @@ import Stopwords from "./Stopwords"; import Stopword from "./Stopword"; import Conversations from "./Conversations"; import Conversation from "./Conversation"; +import Stemming from "./Stemming"; export default class Client { configuration: Configuration; @@ -32,6 +33,7 @@ export default class Client { operations: Operations; multiSearch: MultiSearch; analytics: Analytics; + stemming: Stemming; private readonly _collections: Collections; private readonly individualCollections: Record; private readonly _aliases: Aliases; @@ -67,6 +69,7 @@ export default class Client { this._stopwords = new Stopwords(this.apiCall); this.individualStopwords = {}; this.analytics = new Analytics(this.apiCall); + this.stemming = new Stemming(this.apiCall); this._conversations = new Conversations(this.apiCall); this.individualConversations = {}; } diff --git a/src/Typesense/Stemming.ts b/src/Typesense/Stemming.ts new file mode 100644 index 00000000..ab06957c --- /dev/null +++ b/src/Typesense/Stemming.ts @@ -0,0 +1,38 @@ +import type ApiCall from "./ApiCall"; +import StemmingDictionaries from "./StemmingDictionaries"; +import StemmingDictionary from "./StemmingDictionary"; + +const RESOURCEPATH = "/stemming"; + +export default class Stemming { + private readonly _stemmingDictionaries: StemmingDictionaries; + private readonly individualStemmingDictionaries: Record< + string, + StemmingDictionary + > = {}; + + constructor(private readonly apiCall: ApiCall) { + this.apiCall = apiCall; + this._stemmingDictionaries = new StemmingDictionaries(this.apiCall); + } + + dictionaries(): StemmingDictionaries; + dictionaries(id: string): StemmingDictionary; + dictionaries(id?: string): StemmingDictionaries | StemmingDictionary { + if (id === undefined) { + return this._stemmingDictionaries; + } else { + if (this.individualStemmingDictionaries[id] === undefined) { + this.individualStemmingDictionaries[id] = new StemmingDictionary( + id, + this.apiCall, + ); + } + return this.individualStemmingDictionaries[id]; + } + } + + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} diff --git a/src/Typesense/StemmingDicitonary.ts b/src/Typesense/StemmingDicitonary.ts new file mode 100644 index 00000000..34774491 --- /dev/null +++ b/src/Typesense/StemmingDicitonary.ts @@ -0,0 +1,6 @@ +export default class StemmingDicitonary { + constructor( + private id: string, + private apiCall: ApiCall, + ) {} +} diff --git a/src/Typesense/StemmingDictionaries.ts b/src/Typesense/StemmingDictionaries.ts new file mode 100644 index 00000000..145a8ddd --- /dev/null +++ b/src/Typesense/StemmingDictionaries.ts @@ -0,0 +1,43 @@ +import ApiCall from "./ApiCall"; +import type { + StemmingDictionaryCreateSchema, + StemmingDictionarySchema, +} from "./StemmingDictionary"; + +const RESOURCEPATH = "/stemming-dictionaries"; + +export interface StemmingDictionariesRetrieveSchema { + dictionaries: string[]; +} + +export default class StemmingDictionaries { + constructor(private readonly apiCall: ApiCall) { + this.apiCall = apiCall; + } + + async upsert( + id: string, + params: StemmingDictionaryCreateSchema, + ): Promise { + return this.apiCall.post( + this.endpointPath(id), + params, + ); + } + + async retrieve(): Promise { + return this.apiCall.get( + this.endpointPath(), + ); + } + + private endpointPath(operation?: string): string { + return operation === undefined + ? `${StemmingDictionaries.RESOURCEPATH}` + : `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`; + } + + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} diff --git a/src/Typesense/StemmingDictionary.ts b/src/Typesense/StemmingDictionary.ts new file mode 100644 index 00000000..cabca77b --- /dev/null +++ b/src/Typesense/StemmingDictionary.ts @@ -0,0 +1,26 @@ +import ApiCall from "./ApiCall"; +import StemmingDictionaries from "./StemmingDictionaries"; + +export interface StemmingDictionaryCreateSchema { + words: { root: string; word: string }[]; +} + +export interface StemmingDictionarySchema + extends StemmingDictionaryCreateSchema { + id: string; +} + +export default class StemmingDicitonary { + constructor( + private id: string, + private apiCall: ApiCall, + ) {} + + async retrieve(): Promise { + return this.apiCall.get(this.endpointPath()); + } + + private endpointPath(): string { + return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +} diff --git a/test/Typesense/StemmingDictionaries.spec.js b/test/Typesense/StemmingDictionaries.spec.js new file mode 100644 index 00000000..da3bd4b2 --- /dev/null +++ b/test/Typesense/StemmingDictionaries.spec.js @@ -0,0 +1,95 @@ +import chai from "chai"; +import chaiAsPromised from "chai-as-promised"; +import { Client as TypesenseClient } from "../../src/Typesense"; +import ApiCall from "../../src/Typesense/ApiCall"; +import axios from "axios"; +import MockAxiosAdapter from "axios-mock-adapter"; + +let expect = chai.expect; +chai.use(chaiAsPromised); + +describe("StemmingDictionaries", function () { + let typesense; + let stemmingDictionaries; + let apiCall; + let mockAxios; + + beforeEach(function () { + typesense = new TypesenseClient({ + nodes: [ + { + host: "node0", + port: "8108", + protocol: "http", + }, + ], + apiKey: "abcd", + randomizeNodes: false, + }); + stemmingDictionaries = typesense.stemming.dictionaries(); + apiCall = new ApiCall(typesense.configuration); + mockAxios = new MockAxiosAdapter(axios); + }); + + describe(".upsert", function () { + it("upserts a stemming dictionary", function (done) { + mockAxios + .onPost( + apiCall.uriFor( + "/stemming-dictionaries/set1", + typesense.configuration.nodes[0], + ), + { + words: [{ word: "people", root: "person" }], + }, + { + Accept: "application/json, text/plain, */*", + "Content-Type": "application/json", + "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, + }, + ) + .reply(201, { + id: "set1", + words: [{ word: "people", root: "person" }], + }); + + let returnData = stemmingDictionaries.upsert("set1", { + words: [{ word: "people", root: "person" }], + }); + + expect(returnData) + .to.eventually.deep.equal({ + id: "set1", + words: [{ word: "people", root: "person" }], + }) + .notify(done); + }); + }); + + describe(".retrieve", function () { + it("retrieves all stemming dictionaries", function (done) { + mockAxios + .onGet( + apiCall.uriFor( + "/stemming-dictionaries", + typesense.configuration.nodes[0], + ), + undefined, + { + Accept: "application/json, text/plain, */*", + "Content-Type": "application/json", + "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, + }, + ) + .reply(200, { dictionaries: ["set1", "set2"] }); + + let returnData = stemmingDictionaries.retrieve(); + + expect(returnData) + .to.eventually.deep.equal({ + dictionaries: ["set1", "set2"], + }) + .notify(done); + }); + }); +}); diff --git a/test/Typesense/StemmingDictionary.spec.js b/test/Typesense/StemmingDictionary.spec.js new file mode 100644 index 00000000..a9c8e7fe --- /dev/null +++ b/test/Typesense/StemmingDictionary.spec.js @@ -0,0 +1,64 @@ +import chai from "chai"; +import chaiAsPromised from "chai-as-promised"; +import { Client as TypesenseClient } from "../../src/Typesense"; +import ApiCall from "../../src/Typesense/ApiCall"; +import axios from "axios"; +import MockAxiosAdapter from "axios-mock-adapter"; + +let expect = chai.expect; +chai.use(chaiAsPromised); + +describe("StemmingDictionary", function () { + let typesense; + let stemmingDictionary; + let apiCall; + let mockAxios; + + beforeEach(function () { + typesense = new TypesenseClient({ + nodes: [ + { + host: "node0", + port: "8108", + protocol: "http", + }, + ], + apiKey: "abcd", + randomizeNodes: false, + }); + stemmingDictionary = typesense.stemming.dictionaries("set1"); + apiCall = new ApiCall(typesense.configuration); + mockAxios = new MockAxiosAdapter(axios); + }); + + describe(".retrieve", function () { + it("retrieves the dictionary", function (done) { + mockAxios + .onGet( + apiCall.uriFor( + "/stemming-dictionaries/set1", + typesense.configuration.nodes[0], + ), + null, + { + Accept: "application/json, text/plain, */*", + "Content-Type": "application/json", + "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, + }, + ) + .reply(200, { + id: "set1", + words: [{ word: "people", root: "person" }], + }); + + let returnData = stemmingDictionary.retrieve(); + + expect(returnData) + .to.eventually.deep.equal({ + id: "set1", + words: [{ word: "people", root: "person" }], + }) + .notify(done); + }); + }); +}); From 53537592fbcabbd284a76dea714fa389129c1faa Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Mon, 3 Feb 2025 16:44:28 +0200 Subject: [PATCH 16/45] feat(multi-search): add `rerank_hybrid_searches` parameter to multisearch --- src/Typesense/MultiSearch.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Typesense/MultiSearch.ts b/src/Typesense/MultiSearch.ts index ca092e03..eb7c5dd7 100644 --- a/src/Typesense/MultiSearch.ts +++ b/src/Typesense/MultiSearch.ts @@ -13,6 +13,7 @@ const RESOURCEPATH = "/multi_search"; export interface MultiSearchRequestSchema extends SearchParams { collection?: string; + rerank_hybrid_matches?: boolean; "x-typesense-api-key"?: string; } From d2c0ebab2fb4b3bff9c7314b8ddea3ed393ef7fe Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Mon, 3 Feb 2025 16:57:54 +0200 Subject: [PATCH 17/45] feat(field): add `tokens_separators` and `symbols_to_index` to field-level --- src/Typesense/Collection.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Typesense/Collection.ts b/src/Typesense/Collection.ts index 80f36e14..a3451837 100644 --- a/src/Typesense/Collection.ts +++ b/src/Typesense/Collection.ts @@ -27,7 +27,11 @@ export type FieldType = | "string*" | "image"; -export interface CollectionFieldSchema { +export interface CollectionFieldSchema + extends Pick< + CollectionCreateSchema, + "token_separators" | "symbols_to_index" + > { name: string; type: FieldType; optional?: boolean; From d3897171fcf597019b8989a8ed80b92d28d5e2cb Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Mon, 3 Feb 2025 17:12:50 +0200 Subject: [PATCH 18/45] feat(collections): add collection truncation option --- src/Typesense/Documents.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Typesense/Documents.ts b/src/Typesense/Documents.ts index cd1b6460..2f5c6469 100644 --- a/src/Typesense/Documents.ts +++ b/src/Typesense/Documents.ts @@ -5,11 +5,16 @@ import { ImportError } from "./Errors"; import { SearchOnlyDocuments } from "./SearchOnlyDocuments"; // Todo: use generic to extract filter_by values -export interface DeleteQuery { - filter_by?: string; - batch_size?: number; - ignore_not_found?: boolean; -} +export type DeleteQuery = + | { + truncate?: true; + } + | { + truncate?: never; + filter_by?: string; + batch_size?: number; + ignore_not_found?: boolean; + }; export interface DeleteResponse { num_deleted: number; From efa6bedba658b2732b91e5c7199c7c99c6b26ca2 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Mon, 3 Feb 2025 17:24:07 +0200 Subject: [PATCH 19/45] feat(fields): add `geopolygon` field type --- src/Typesense/Collection.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Typesense/Collection.ts b/src/Typesense/Collection.ts index a3451837..cad1b45a 100644 --- a/src/Typesense/Collection.ts +++ b/src/Typesense/Collection.ts @@ -15,6 +15,7 @@ export type FieldType = | "float" | "bool" | "geopoint" + | "geopolygon" | "geopoint[]" | "string[]" | "int32[]" From b7350c9f1e9a20c8d4c7ffa40ca223b5690d65f4 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Mon, 3 Feb 2025 18:33:40 +0200 Subject: [PATCH 20/45] feat(search): add `max_filter_by_candidates` search param --- src/Typesense/Documents.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Typesense/Documents.ts b/src/Typesense/Documents.ts index 2f5c6469..ad8887d8 100644 --- a/src/Typesense/Documents.ts +++ b/src/Typesense/Documents.ts @@ -98,6 +98,7 @@ export interface SearchParams { query_by_weights?: string | number[]; prefix?: string | boolean | boolean[]; // default: true filter_by?: string; + max_filter_by_candidates?: number; // default: 4 enable_synonyms?: boolean; // default: true enable_analytics?: boolean; // default: true filter_curated_hits?: boolean; // default: false From d58512c8096ddcca20ceed899ce3158d26467534 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Mon, 3 Feb 2025 18:34:06 +0200 Subject: [PATCH 21/45] feat(operations): add the `schema_changes` operation option --- src/Typesense/Operations.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Typesense/Operations.ts b/src/Typesense/Operations.ts index e671b424..026338ec 100644 --- a/src/Typesense/Operations.ts +++ b/src/Typesense/Operations.ts @@ -6,14 +6,19 @@ export default class Operations { constructor(private apiCall: ApiCall) {} async perform( - // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}` - operationName: "vote" | "snapshot" | "cache/clear" | (string & {}), + operationName: + | "vote" + | "snapshot" + | "cache/clear" + | "schema_changes" + // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}` + | (string & {}), queryParameters: Record = {}, ): Promise { return this.apiCall.post( `${RESOURCEPATH}/${operationName}`, {}, - queryParameters + queryParameters, ); } } From c2dacf1959073e63dbc231271ff7260854a784c2 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Mon, 3 Feb 2025 18:44:44 +0200 Subject: [PATCH 22/45] fix: remove redudant stemming dict file --- src/Typesense/StemmingDicitonary.ts | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 src/Typesense/StemmingDicitonary.ts diff --git a/src/Typesense/StemmingDicitonary.ts b/src/Typesense/StemmingDicitonary.ts deleted file mode 100644 index 34774491..00000000 --- a/src/Typesense/StemmingDicitonary.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default class StemmingDicitonary { - constructor( - private id: string, - private apiCall: ApiCall, - ) {} -} From ec09e2da5cc02b154370418ad39545898859a172 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Tue, 4 Feb 2025 11:02:14 +0200 Subject: [PATCH 23/45] fix(stemming): fix stemming resource path --- src/Typesense/StemmingDictionaries.ts | 2 +- test/Typesense/StemmingDictionaries.spec.js | 4 ++-- test/Typesense/StemmingDictionary.spec.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Typesense/StemmingDictionaries.ts b/src/Typesense/StemmingDictionaries.ts index 145a8ddd..52a78d70 100644 --- a/src/Typesense/StemmingDictionaries.ts +++ b/src/Typesense/StemmingDictionaries.ts @@ -4,7 +4,7 @@ import type { StemmingDictionarySchema, } from "./StemmingDictionary"; -const RESOURCEPATH = "/stemming-dictionaries"; +const RESOURCEPATH = "/stemming/dictionary"; export interface StemmingDictionariesRetrieveSchema { dictionaries: string[]; diff --git a/test/Typesense/StemmingDictionaries.spec.js b/test/Typesense/StemmingDictionaries.spec.js index da3bd4b2..49869bf0 100644 --- a/test/Typesense/StemmingDictionaries.spec.js +++ b/test/Typesense/StemmingDictionaries.spec.js @@ -36,7 +36,7 @@ describe("StemmingDictionaries", function () { mockAxios .onPost( apiCall.uriFor( - "/stemming-dictionaries/set1", + "/stemming/dictionary/set1", typesense.configuration.nodes[0], ), { @@ -71,7 +71,7 @@ describe("StemmingDictionaries", function () { mockAxios .onGet( apiCall.uriFor( - "/stemming-dictionaries", + "/stemming/dictionary", typesense.configuration.nodes[0], ), undefined, diff --git a/test/Typesense/StemmingDictionary.spec.js b/test/Typesense/StemmingDictionary.spec.js index a9c8e7fe..d13090e0 100644 --- a/test/Typesense/StemmingDictionary.spec.js +++ b/test/Typesense/StemmingDictionary.spec.js @@ -36,7 +36,7 @@ describe("StemmingDictionary", function () { mockAxios .onGet( apiCall.uriFor( - "/stemming-dictionaries/set1", + "/stemming/dictionary/set1", typesense.configuration.nodes[0], ), null, From 19efbb00d868827206e294df6b6bb82754f1ab7f Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Tue, 4 Feb 2025 13:13:01 +0200 Subject: [PATCH 24/45] fix(stemming): update dictionary interface and JSONL handling - refactor `StemmingDictionaryCreateSchema` to use single word-root pairs - update `upsert` method to handle JSONL format for dictionaries - fix typo in `StemmingDictionary` class name - change endpoint path from `/stemming/dictionary` to `/dictionaries` - add JSONL conversion for array inputs and string handling --- src/Typesense/StemmingDictionaries.ts | 36 +++++++++++++++++++-------- src/Typesense/StemmingDictionary.ts | 9 ++++--- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/Typesense/StemmingDictionaries.ts b/src/Typesense/StemmingDictionaries.ts index 52a78d70..6b3d8fe3 100644 --- a/src/Typesense/StemmingDictionaries.ts +++ b/src/Typesense/StemmingDictionaries.ts @@ -1,10 +1,7 @@ import ApiCall from "./ApiCall"; -import type { - StemmingDictionaryCreateSchema, - StemmingDictionarySchema, -} from "./StemmingDictionary"; +import type { StemmingDictionaryCreateSchema } from "./StemmingDictionary"; -const RESOURCEPATH = "/stemming/dictionary"; +const RESOURCEPATH = "/stemming/dictionaries"; export interface StemmingDictionariesRetrieveSchema { dictionaries: string[]; @@ -17,12 +14,31 @@ export default class StemmingDictionaries { async upsert( id: string, - params: StemmingDictionaryCreateSchema, - ): Promise { - return this.apiCall.post( - this.endpointPath(id), - params, + wordRootCombinations: StemmingDictionaryCreateSchema[] | string, + ): Promise { + const wordRootCombinationsInJSONLFormat = Array.isArray( + wordRootCombinations, + ) + ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join("\n") + : wordRootCombinations; + + const resultsInJSONLFormat = await this.apiCall.performRequest( + + "post", + this.endpointPath("import"), + { + queryParameters: {id}, + bodyParameters: wordRootCombinationsInJSONLFormat, + additionalHeaders: {"Content-Type": "text/plain"}, + skipConnectionTimeout: true, + } ); + + return Array.isArray(wordRootCombinations) + ? resultsInJSONLFormat + .split("\n") + .map((line) => JSON.parse(line) as StemmingDictionaryCreateSchema) + : resultsInJSONLFormat; } async retrieve(): Promise { diff --git a/src/Typesense/StemmingDictionary.ts b/src/Typesense/StemmingDictionary.ts index cabca77b..8c9770b5 100644 --- a/src/Typesense/StemmingDictionary.ts +++ b/src/Typesense/StemmingDictionary.ts @@ -2,15 +2,16 @@ import ApiCall from "./ApiCall"; import StemmingDictionaries from "./StemmingDictionaries"; export interface StemmingDictionaryCreateSchema { - words: { root: string; word: string }[]; + root: string; + word: string; } -export interface StemmingDictionarySchema - extends StemmingDictionaryCreateSchema { +export interface StemmingDictionarySchema { id: string; + words: StemmingDictionaryCreateSchema; } -export default class StemmingDicitonary { +export default class StemmingDictionary { constructor( private id: string, private apiCall: ApiCall, From bdebd1ff87df7e8d733af8b185ec42dc4e102b74 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Tue, 4 Feb 2025 13:22:38 +0200 Subject: [PATCH 25/45] fix(stemming): fix tests for stemming --- test/Typesense/StemmingDictionaries.spec.js | 37 +-------------------- test/Typesense/StemmingDictionary.spec.js | 2 +- 2 files changed, 2 insertions(+), 37 deletions(-) diff --git a/test/Typesense/StemmingDictionaries.spec.js b/test/Typesense/StemmingDictionaries.spec.js index 49869bf0..fb2807b5 100644 --- a/test/Typesense/StemmingDictionaries.spec.js +++ b/test/Typesense/StemmingDictionaries.spec.js @@ -31,47 +31,12 @@ describe("StemmingDictionaries", function () { mockAxios = new MockAxiosAdapter(axios); }); - describe(".upsert", function () { - it("upserts a stemming dictionary", function (done) { - mockAxios - .onPost( - apiCall.uriFor( - "/stemming/dictionary/set1", - typesense.configuration.nodes[0], - ), - { - words: [{ word: "people", root: "person" }], - }, - { - Accept: "application/json, text/plain, */*", - "Content-Type": "application/json", - "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - }, - ) - .reply(201, { - id: "set1", - words: [{ word: "people", root: "person" }], - }); - - let returnData = stemmingDictionaries.upsert("set1", { - words: [{ word: "people", root: "person" }], - }); - - expect(returnData) - .to.eventually.deep.equal({ - id: "set1", - words: [{ word: "people", root: "person" }], - }) - .notify(done); - }); - }); - describe(".retrieve", function () { it("retrieves all stemming dictionaries", function (done) { mockAxios .onGet( apiCall.uriFor( - "/stemming/dictionary", + "/stemming/dictionaries", typesense.configuration.nodes[0], ), undefined, diff --git a/test/Typesense/StemmingDictionary.spec.js b/test/Typesense/StemmingDictionary.spec.js index d13090e0..e86bb5a1 100644 --- a/test/Typesense/StemmingDictionary.spec.js +++ b/test/Typesense/StemmingDictionary.spec.js @@ -36,7 +36,7 @@ describe("StemmingDictionary", function () { mockAxios .onGet( apiCall.uriFor( - "/stemming/dictionary/set1", + "/stemming/dictionaries/set1", typesense.configuration.nodes[0], ), null, From d5ca72b0f9cad34875a18b8577a675d1a461d715 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Tue, 4 Feb 2025 14:34:29 +0200 Subject: [PATCH 26/45] fix(types): fix return type for stemming dictionaries --- src/Typesense/StemmingDictionary.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Typesense/StemmingDictionary.ts b/src/Typesense/StemmingDictionary.ts index 8c9770b5..487f5d9c 100644 --- a/src/Typesense/StemmingDictionary.ts +++ b/src/Typesense/StemmingDictionary.ts @@ -8,7 +8,7 @@ export interface StemmingDictionaryCreateSchema { export interface StemmingDictionarySchema { id: string; - words: StemmingDictionaryCreateSchema; + words: StemmingDictionaryCreateSchema[]; } export default class StemmingDictionary { From bfdfee02fae8ca94a27efdaae24a461f49deb68f Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Thu, 6 Feb 2025 11:50:41 +0200 Subject: [PATCH 27/45] build: configure tsc and tsup for dual compilation - run `tsc` before `tsup` in `build` script - remove duplicate browser configuration from `tsup.config.ts` - simplify build process while maintaining browser compatibility --- package.json | 2 +- tsup.config.ts | 30 ------------------------------ 2 files changed, 1 insertion(+), 31 deletions(-) diff --git a/package.json b/package.json index f7a68fca..5f69f6e2 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "pretest": "eslint .", "prepare": "npm run build", "test": "nyc --reporter=html --reporter=text ts-mocha --require @babel/register --recursive", - "build": "tsup", + "build": "tsc && tsup", "build:tsc": "tsc", "build:web:dev": "webpack --config webpack.config.js --mode development", "build:web:prod": "webpack --config webpack.config.js --mode production", diff --git a/tsup.config.ts b/tsup.config.ts index 33d140d3..4e680218 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -4,36 +4,6 @@ import browserList from "browserslist-to-esbuild"; import { nodeModulesPolyfillPlugin } from "esbuild-plugins-node-modules-polyfill"; export default defineConfig([ - { - target: browserList(["defaults"]) as Options["target"], - entry: ["src/Typesense.ts"], - sourcemap: true, - clean: true, - format: ["cjs", "esm"], - dts: true, - outDir: "lib", - minify: true, - outExtension({ format }) { - return { - js: `.min.${format === "cjs" ? "js" : "mjs"}`, - }; - }, - splitting: true, - platform: "browser", - esbuildOptions(options) { - options.mainFields = ["browser", "module", "main"]; - options.treeShaking = true; - }, - esbuildPlugins: [ - nodeModulesPolyfillPlugin({ - modules: { - crypto: "empty", - http: "empty", - https: "empty", - }, - }), - ], - }, { target: browserList(["defaults"]) as Options["target"], entry: ["src/Typesense.ts"], From 5fc85dc9065bbb69fd7db2373654423c3bc894fc Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Thu, 6 Feb 2025 16:58:03 +0200 Subject: [PATCH 28/45] build(exports): configure package exports for typescript imports - update `.` export to use correct `import` and `require` fields - add `default` field for compatibiliy with typescript imports - rename `browser.ts` entry point to support module resolution - update build configuration to use new entry point --- package.json | 26 ++++++++++---------------- src/Typesense.ts | 9 ++++----- src/browser.ts | 33 +++++++++++++++++++++++++++++++++ tsup.config.ts | 4 +++- 4 files changed, 50 insertions(+), 22 deletions(-) create mode 100644 src/browser.ts diff --git a/package.json b/package.json index 5f69f6e2..814eafd6 100644 --- a/package.json +++ b/package.json @@ -20,9 +20,6 @@ "url": "https://github.com/dcantu476" } ], - "main": "lib/Typesense.min.js", - "types": "lib/Typesense.d.ts", - "module": "lib/Typesense.min.mjs", "browser": { "crypto": false, "http": false, @@ -31,20 +28,18 @@ "exports": { ".": { "types": "./lib/Typesense.d.ts", - "import": "./lib/Typesense.min.mjs", - "require": "./lib/Typesense.min.js" + "default": "./lib/Typesense.js" + }, + "./lib/Typesense/*": { + "types": "./lib/Typesense/*.d.ts", + "default": "./lib/Typesense/*.js" }, "./dist": { - "types": "./dist/Typesense.d.ts", - "import": "./dist/Typesense.min.mjs", - "require": "./dist/Typesense.min.js" + "types": "./dist/typesense.d.ts", + "import": "./dist/typesense.min.mjs", + "require": "./dist/typesense.min.js" } }, - "files": [ - "lib/", - "dist/", - "src/" - ], "keywords": [ "typesense", "api", @@ -109,9 +104,8 @@ "prepare": "npm run build", "test": "nyc --reporter=html --reporter=text ts-mocha --require @babel/register --recursive", "build": "tsc && tsup", - "build:tsc": "tsc", - "build:web:dev": "webpack --config webpack.config.js --mode development", - "build:web:prod": "webpack --config webpack.config.js --mode production", + "prebuild": "rimraf dist lib", + "postbuild": "rimraf lib/browser*", "build:tsc:watch": "tsc --watch", "ci-lint": "eslint .", "ci-test": "nyc --reporter=text --reporter=html ts-mocha --require @babel/register --reporter mocha-junit-reporter --recursive --colors", diff --git a/src/Typesense.ts b/src/Typesense.ts index 8f5cdd2a..f632b7fe 100644 --- a/src/Typesense.ts +++ b/src/Typesense.ts @@ -1,10 +1,9 @@ -import SearchClient from "./Typesense/SearchClient"; import Client from "./Typesense/Client"; +import SearchClient from "./Typesense/SearchClient"; +import * as Errors from "./Typesense/Errors"; -export { SearchClient }; -export { Client }; -export * as Errors from "./Typesense/Errors"; - +export { Client, SearchClient, Errors }; +export default { Client, SearchClient, Errors }; export type * from "./Typesense/Aliases"; export type * from "./Typesense/AnalyticsEvent"; export type * from "./Typesense/AnalyticsRule"; diff --git a/src/browser.ts b/src/browser.ts new file mode 100644 index 00000000..8f5cdd2a --- /dev/null +++ b/src/browser.ts @@ -0,0 +1,33 @@ +import SearchClient from "./Typesense/SearchClient"; +import Client from "./Typesense/Client"; + +export { SearchClient }; +export { Client }; +export * as Errors from "./Typesense/Errors"; + +export type * from "./Typesense/Aliases"; +export type * from "./Typesense/AnalyticsEvent"; +export type * from "./Typesense/AnalyticsRule"; +export type * from "./Typesense/AnalyticsRules"; +export type * from "./Typesense/Collection"; +export type * from "./Typesense/Collections"; +export type * from "./Typesense/Configuration"; +export type * from "./Typesense/Conversations"; +export type * from "./Typesense/Conversation"; +export type * from "./Typesense/ConversationModel"; +export type * from "./Typesense/Debug"; +export type * from "./Typesense/Documents"; +export type * from "./Typesense/Health"; +export type * from "./Typesense/Key"; +export type * from "./Typesense/Keys"; +export type * from "./Typesense/Metrics"; +export type * from "./Typesense/MultiSearch"; +export type * from "./Typesense/Override"; +export type * from "./Typesense/Overrides"; +export type * from "./Typesense/Preset"; +export type * from "./Typesense/Presets"; +export type * from "./Typesense/Stats"; +export type * from "./Typesense/Stopword"; +export type * from "./Typesense/Stopwords"; +export type * from "./Typesense/Synonym"; +export type * from "./Typesense/Synonyms"; diff --git a/tsup.config.ts b/tsup.config.ts index 4e680218..84e0185a 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -6,7 +6,9 @@ import { nodeModulesPolyfillPlugin } from "esbuild-plugins-node-modules-polyfill export default defineConfig([ { target: browserList(["defaults"]) as Options["target"], - entry: ["src/Typesense.ts"], + entry: { + typesense: "src/browser.ts", + }, sourcemap: true, clean: true, format: ["cjs", "esm"], From ae7de6cd0bd21a1ab26cdedf8ef6d09e659293be Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Thu, 6 Feb 2025 17:04:10 +0200 Subject: [PATCH 29/45] build: add unminified version of browser dist --- tsup.config.ts | 63 +++++++++++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 24 deletions(-) diff --git a/tsup.config.ts b/tsup.config.ts index 84e0185a..648c0932 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -3,37 +3,52 @@ import type { Options } from "tsup"; import browserList from "browserslist-to-esbuild"; import { nodeModulesPolyfillPlugin } from "esbuild-plugins-node-modules-polyfill"; +const baseOptions: Options = { + target: browserList(["defaults"]) as Options["target"], + entry: { + typesense: "src/browser.ts", + }, + clean: true, + format: ["cjs", "esm"], + outDir: "dist", + outExtension({ format }) { + return { + js: `.min.${format === "cjs" ? "js" : "mjs"}`, + }; + }, + splitting: true, + platform: "browser", + esbuildOptions(options) { + options.mainFields = ["browser", "module", "main"]; + options.treeShaking = true; + }, + esbuildPlugins: [ + nodeModulesPolyfillPlugin({ + modules: { + crypto: "empty", + http: "empty", + https: "empty", + }, + }), + ], +}; + export default defineConfig([ { - target: browserList(["defaults"]) as Options["target"], - entry: { - typesense: "src/browser.ts", - }, + ...baseOptions, + minify: true, sourcemap: true, - clean: true, - format: ["cjs", "esm"], dts: true, - outDir: "dist", - minify: true, + }, + { + ...baseOptions, + minify: false, + sourcemap: false, + dts: false, outExtension({ format }) { return { - js: `.min.${format === "cjs" ? "js" : "mjs"}`, + js: `.${format === "cjs" ? "js" : "mjs"}`, }; }, - splitting: true, - platform: "browser", - esbuildOptions(options) { - options.mainFields = ["browser", "module", "main"]; - options.treeShaking = true; - }, - esbuildPlugins: [ - nodeModulesPolyfillPlugin({ - modules: { - crypto: "empty", - http: "empty", - https: "empty", - }, - }), - ], }, ]); From 5cddab3ff38350ab625626fa2676484c825b27f3 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Thu, 6 Feb 2025 17:04:46 +0200 Subject: [PATCH 30/45] chore: build artifacts --- dist/Typesense.min.js | 9 - dist/Typesense.min.js.map | 1 - dist/Typesense.min.mjs | 9 - dist/Typesense.min.mjs.map | 1 - dist/{Typesense.d.mts => typesense.d.mts} | 55 +- dist/{Typesense.d.ts => typesense.d.ts} | 55 +- dist/typesense.js | 1779 +++++++++++++++++ lib/Typesense.min.js => dist/typesense.min.js | 14 +- dist/typesense.min.js.map | 1 + dist/typesense.min.mjs | 11 + dist/typesense.min.mjs.map | 1 + dist/typesense.mjs | 1779 +++++++++++++++++ lib/Typesense.d.mts | 1125 ----------- lib/Typesense.d.ts | 1159 +---------- lib/Typesense.js | 12 + lib/Typesense.js.map | 1 + lib/Typesense.min.js.map | 1 - lib/Typesense.min.mjs | 9 - lib/Typesense.min.mjs.map | 1 - lib/Typesense/Alias.d.ts | 10 + lib/Typesense/Alias.js | 30 + lib/Typesense/Alias.js.map | 1 + lib/Typesense/Aliases.d.ts | 18 + lib/Typesense/Aliases.js | 36 + lib/Typesense/Aliases.js.map | 1 + lib/Typesense/Analytics.d.ts | 15 + lib/Typesense/Analytics.js | 40 + lib/Typesense/Analytics.js.map | 1 + lib/Typesense/AnalyticsEvent.d.ts | 5 + lib/Typesense/AnalyticsEvent.js | 3 + lib/Typesense/AnalyticsEvent.js.map | 1 + lib/Typesense/AnalyticsEvents.d.ts | 9 + lib/Typesense/AnalyticsEvents.js | 30 + lib/Typesense/AnalyticsEvents.js.map | 1 + lib/Typesense/AnalyticsRule.d.ts | 35 + lib/Typesense/AnalyticsRule.js | 30 + lib/Typesense/AnalyticsRule.js.map | 1 + lib/Typesense/AnalyticsRules.d.ts | 13 + lib/Typesense/AnalyticsRules.js | 37 + lib/Typesense/AnalyticsRules.js.map | 1 + lib/Typesense/ApiCall.d.ts | 49 + lib/Typesense/ApiCall.js | 406 ++++ lib/Typesense/ApiCall.js.map | 1 + lib/Typesense/Client.d.ts | 59 + lib/Typesense/Client.js | 123 ++ lib/Typesense/Client.js.map | 1 + lib/Typesense/Collection.d.ts | 62 + lib/Typesense/Collection.js | 109 + lib/Typesense/Collection.js.map | 1 + lib/Typesense/Collections.d.ts | 27 + lib/Typesense/Collections.js | 35 + lib/Typesense/Collections.js.map | 1 + lib/Typesense/Configuration.d.ts | 115 ++ lib/Typesense/Configuration.js | 113 ++ lib/Typesense/Configuration.js.map | 1 + lib/Typesense/Conversation.d.ts | 22 + lib/Typesense/Conversation.js | 37 + lib/Typesense/Conversation.js.map | 1 + lib/Typesense/ConversationModel.d.ts | 24 + lib/Typesense/ConversationModel.js | 37 + lib/Typesense/ConversationModel.js.map | 1 + lib/Typesense/ConversationModels.d.ts | 10 + lib/Typesense/ConversationModels.js | 37 + lib/Typesense/ConversationModels.js.map | 1 + lib/Typesense/Conversations.d.ts | 17 + lib/Typesense/Conversations.js | 42 + lib/Typesense/Conversations.js.map | 1 + lib/Typesense/Debug.d.ts | 10 + lib/Typesense/Debug.js | 19 + lib/Typesense/Debug.js.map | 1 + lib/Typesense/Document.d.ts | 12 + lib/Typesense/Document.js | 41 + lib/Typesense/Document.js.map | 1 + lib/Typesense/Documents.d.ts | 260 +++ lib/Typesense/Documents.js | 210 ++ lib/Typesense/Documents.js.map | 1 + lib/Typesense/Errors/HTTPError.d.ts | 3 + lib/Typesense/Errors/HTTPError.js | 13 + lib/Typesense/Errors/HTTPError.js.map | 1 + lib/Typesense/Errors/ImportError.d.ts | 15 + lib/Typesense/Errors/ImportError.js | 16 + lib/Typesense/Errors/ImportError.js.map | 1 + .../Errors/MissingConfigurationError.d.ts | 3 + .../Errors/MissingConfigurationError.js | 13 + .../Errors/MissingConfigurationError.js.map | 1 + lib/Typesense/Errors/ObjectAlreadyExists.d.ts | 3 + lib/Typesense/Errors/ObjectAlreadyExists.js | 13 + .../Errors/ObjectAlreadyExists.js.map | 1 + lib/Typesense/Errors/ObjectNotFound.d.ts | 3 + lib/Typesense/Errors/ObjectNotFound.js | 13 + lib/Typesense/Errors/ObjectNotFound.js.map | 1 + lib/Typesense/Errors/ObjectUnprocessable.d.ts | 3 + lib/Typesense/Errors/ObjectUnprocessable.js | 13 + .../Errors/ObjectUnprocessable.js.map | 1 + lib/Typesense/Errors/RequestMalformed.d.ts | 3 + lib/Typesense/Errors/RequestMalformed.js | 13 + lib/Typesense/Errors/RequestMalformed.js.map | 1 + lib/Typesense/Errors/RequestUnauthorized.d.ts | 3 + lib/Typesense/Errors/RequestUnauthorized.js | 13 + .../Errors/RequestUnauthorized.js.map | 1 + lib/Typesense/Errors/ServerError.d.ts | 3 + lib/Typesense/Errors/ServerError.js | 13 + lib/Typesense/Errors/ServerError.js.map | 1 + lib/Typesense/Errors/TypesenseError.d.ts | 5 + lib/Typesense/Errors/TypesenseError.js | 19 + lib/Typesense/Errors/TypesenseError.js.map | 1 + lib/Typesense/Errors/index.d.ts | 11 + lib/Typesense/Errors/index.js | 25 + lib/Typesense/Errors/index.js.map | 1 + lib/Typesense/Health.d.ts | 9 + lib/Typesense/Health.js | 19 + lib/Typesense/Health.js.map | 1 + lib/Typesense/Key.d.ts | 24 + lib/Typesense/Key.js | 30 + lib/Typesense/Key.js.map | 1 + lib/Typesense/Keys.d.ts | 19 + lib/Typesense/Keys.js | 46 + lib/Typesense/Keys.js.map | 1 + lib/Typesense/Metrics.d.ts | 25 + lib/Typesense/Metrics.js | 19 + lib/Typesense/Metrics.js.map | 1 + lib/Typesense/MultiSearch.d.ts | 34 + lib/Typesense/MultiSearch.js | 50 + lib/Typesense/MultiSearch.js.map | 1 + lib/Typesense/Operations.d.ts | 6 + lib/Typesense/Operations.js | 20 + lib/Typesense/Operations.js.map | 1 + lib/Typesense/Override.d.ts | 17 + lib/Typesense/Override.js | 32 + lib/Typesense/Override.js.map | 1 + lib/Typesense/Overrides.d.ts | 43 + lib/Typesense/Overrides.js | 38 + lib/Typesense/Overrides.js.map | 1 + lib/Typesense/Preset.d.ts | 16 + lib/Typesense/Preset.js | 30 + lib/Typesense/Preset.js.map | 1 + lib/Typesense/Presets.d.ts | 18 + lib/Typesense/Presets.js | 49 + lib/Typesense/Presets.js.map | 1 + lib/Typesense/RequestWithCache.d.ts | 11 + lib/Typesense/RequestWithCache.js | 88 + lib/Typesense/RequestWithCache.js.map | 1 + lib/Typesense/SearchClient.d.ts | 13 + lib/Typesense/SearchClient.js | 45 + lib/Typesense/SearchClient.js.map | 1 + lib/Typesense/SearchOnlyCollection.d.ts | 10 + lib/Typesense/SearchOnlyCollection.js | 18 + lib/Typesense/SearchOnlyCollection.js.map | 1 + lib/Typesense/SearchOnlyDocuments.d.ts | 15 + lib/Typesense/SearchOnlyDocuments.js | 50 + lib/Typesense/SearchOnlyDocuments.js.map | 1 + lib/Typesense/Stats.d.ts | 24 + lib/Typesense/Stats.js | 19 + lib/Typesense/Stats.js.map | 1 + lib/Typesense/Stemming.d.ts | 12 + lib/Typesense/Stemming.js | 35 + lib/Typesense/Stemming.js.map | 1 + lib/Typesense/StemmingDictionaries.d.ts | 13 + lib/Typesense/StemmingDictionaries.js | 58 + lib/Typesense/StemmingDictionaries.js.map | 1 + lib/Typesense/StemmingDictionary.d.ts | 16 + lib/Typesense/StemmingDictionary.js | 23 + lib/Typesense/StemmingDictionary.js.map | 1 + lib/Typesense/Stopword.d.ts | 18 + lib/Typesense/Stopword.js | 30 + lib/Typesense/Stopword.js.map | 1 + lib/Typesense/Stopwords.d.ts | 17 + lib/Typesense/Stopwords.js | 36 + lib/Typesense/Stopwords.js.map | 1 + lib/Typesense/Synonym.d.ts | 17 + lib/Typesense/Synonym.js | 32 + lib/Typesense/Synonym.js.map | 1 + lib/Typesense/Synonyms.d.ts | 20 + lib/Typesense/Synonyms.js | 38 + lib/Typesense/Synonyms.js.map | 1 + lib/Typesense/Utils.d.ts | 6 + lib/Typesense/Utils.js | 30 + lib/Typesense/Utils.js.map | 1 + 178 files changed, 7424 insertions(+), 2296 deletions(-) delete mode 100644 dist/Typesense.min.js delete mode 100644 dist/Typesense.min.js.map delete mode 100644 dist/Typesense.min.mjs delete mode 100644 dist/Typesense.min.mjs.map rename dist/{Typesense.d.mts => typesense.d.mts} (95%) rename dist/{Typesense.d.ts => typesense.d.ts} (95%) create mode 100644 dist/typesense.js rename lib/Typesense.min.js => dist/typesense.min.js (51%) create mode 100644 dist/typesense.min.js.map create mode 100644 dist/typesense.min.mjs create mode 100644 dist/typesense.min.mjs.map create mode 100644 dist/typesense.mjs delete mode 100644 lib/Typesense.d.mts create mode 100644 lib/Typesense.js create mode 100644 lib/Typesense.js.map delete mode 100644 lib/Typesense.min.js.map delete mode 100644 lib/Typesense.min.mjs delete mode 100644 lib/Typesense.min.mjs.map create mode 100644 lib/Typesense/Alias.d.ts create mode 100644 lib/Typesense/Alias.js create mode 100644 lib/Typesense/Alias.js.map create mode 100644 lib/Typesense/Aliases.d.ts create mode 100644 lib/Typesense/Aliases.js create mode 100644 lib/Typesense/Aliases.js.map create mode 100644 lib/Typesense/Analytics.d.ts create mode 100644 lib/Typesense/Analytics.js create mode 100644 lib/Typesense/Analytics.js.map create mode 100644 lib/Typesense/AnalyticsEvent.d.ts create mode 100644 lib/Typesense/AnalyticsEvent.js create mode 100644 lib/Typesense/AnalyticsEvent.js.map create mode 100644 lib/Typesense/AnalyticsEvents.d.ts create mode 100644 lib/Typesense/AnalyticsEvents.js create mode 100644 lib/Typesense/AnalyticsEvents.js.map create mode 100644 lib/Typesense/AnalyticsRule.d.ts create mode 100644 lib/Typesense/AnalyticsRule.js create mode 100644 lib/Typesense/AnalyticsRule.js.map create mode 100644 lib/Typesense/AnalyticsRules.d.ts create mode 100644 lib/Typesense/AnalyticsRules.js create mode 100644 lib/Typesense/AnalyticsRules.js.map create mode 100644 lib/Typesense/ApiCall.d.ts create mode 100644 lib/Typesense/ApiCall.js create mode 100644 lib/Typesense/ApiCall.js.map create mode 100644 lib/Typesense/Client.d.ts create mode 100644 lib/Typesense/Client.js create mode 100644 lib/Typesense/Client.js.map create mode 100644 lib/Typesense/Collection.d.ts create mode 100644 lib/Typesense/Collection.js create mode 100644 lib/Typesense/Collection.js.map create mode 100644 lib/Typesense/Collections.d.ts create mode 100644 lib/Typesense/Collections.js create mode 100644 lib/Typesense/Collections.js.map create mode 100644 lib/Typesense/Configuration.d.ts create mode 100644 lib/Typesense/Configuration.js create mode 100644 lib/Typesense/Configuration.js.map create mode 100644 lib/Typesense/Conversation.d.ts create mode 100644 lib/Typesense/Conversation.js create mode 100644 lib/Typesense/Conversation.js.map create mode 100644 lib/Typesense/ConversationModel.d.ts create mode 100644 lib/Typesense/ConversationModel.js create mode 100644 lib/Typesense/ConversationModel.js.map create mode 100644 lib/Typesense/ConversationModels.d.ts create mode 100644 lib/Typesense/ConversationModels.js create mode 100644 lib/Typesense/ConversationModels.js.map create mode 100644 lib/Typesense/Conversations.d.ts create mode 100644 lib/Typesense/Conversations.js create mode 100644 lib/Typesense/Conversations.js.map create mode 100644 lib/Typesense/Debug.d.ts create mode 100644 lib/Typesense/Debug.js create mode 100644 lib/Typesense/Debug.js.map create mode 100644 lib/Typesense/Document.d.ts create mode 100644 lib/Typesense/Document.js create mode 100644 lib/Typesense/Document.js.map create mode 100644 lib/Typesense/Documents.d.ts create mode 100644 lib/Typesense/Documents.js create mode 100644 lib/Typesense/Documents.js.map create mode 100644 lib/Typesense/Errors/HTTPError.d.ts create mode 100644 lib/Typesense/Errors/HTTPError.js create mode 100644 lib/Typesense/Errors/HTTPError.js.map create mode 100644 lib/Typesense/Errors/ImportError.d.ts create mode 100644 lib/Typesense/Errors/ImportError.js create mode 100644 lib/Typesense/Errors/ImportError.js.map create mode 100644 lib/Typesense/Errors/MissingConfigurationError.d.ts create mode 100644 lib/Typesense/Errors/MissingConfigurationError.js create mode 100644 lib/Typesense/Errors/MissingConfigurationError.js.map create mode 100644 lib/Typesense/Errors/ObjectAlreadyExists.d.ts create mode 100644 lib/Typesense/Errors/ObjectAlreadyExists.js create mode 100644 lib/Typesense/Errors/ObjectAlreadyExists.js.map create mode 100644 lib/Typesense/Errors/ObjectNotFound.d.ts create mode 100644 lib/Typesense/Errors/ObjectNotFound.js create mode 100644 lib/Typesense/Errors/ObjectNotFound.js.map create mode 100644 lib/Typesense/Errors/ObjectUnprocessable.d.ts create mode 100644 lib/Typesense/Errors/ObjectUnprocessable.js create mode 100644 lib/Typesense/Errors/ObjectUnprocessable.js.map create mode 100644 lib/Typesense/Errors/RequestMalformed.d.ts create mode 100644 lib/Typesense/Errors/RequestMalformed.js create mode 100644 lib/Typesense/Errors/RequestMalformed.js.map create mode 100644 lib/Typesense/Errors/RequestUnauthorized.d.ts create mode 100644 lib/Typesense/Errors/RequestUnauthorized.js create mode 100644 lib/Typesense/Errors/RequestUnauthorized.js.map create mode 100644 lib/Typesense/Errors/ServerError.d.ts create mode 100644 lib/Typesense/Errors/ServerError.js create mode 100644 lib/Typesense/Errors/ServerError.js.map create mode 100644 lib/Typesense/Errors/TypesenseError.d.ts create mode 100644 lib/Typesense/Errors/TypesenseError.js create mode 100644 lib/Typesense/Errors/TypesenseError.js.map create mode 100644 lib/Typesense/Errors/index.d.ts create mode 100644 lib/Typesense/Errors/index.js create mode 100644 lib/Typesense/Errors/index.js.map create mode 100644 lib/Typesense/Health.d.ts create mode 100644 lib/Typesense/Health.js create mode 100644 lib/Typesense/Health.js.map create mode 100644 lib/Typesense/Key.d.ts create mode 100644 lib/Typesense/Key.js create mode 100644 lib/Typesense/Key.js.map create mode 100644 lib/Typesense/Keys.d.ts create mode 100644 lib/Typesense/Keys.js create mode 100644 lib/Typesense/Keys.js.map create mode 100644 lib/Typesense/Metrics.d.ts create mode 100644 lib/Typesense/Metrics.js create mode 100644 lib/Typesense/Metrics.js.map create mode 100644 lib/Typesense/MultiSearch.d.ts create mode 100644 lib/Typesense/MultiSearch.js create mode 100644 lib/Typesense/MultiSearch.js.map create mode 100644 lib/Typesense/Operations.d.ts create mode 100644 lib/Typesense/Operations.js create mode 100644 lib/Typesense/Operations.js.map create mode 100644 lib/Typesense/Override.d.ts create mode 100644 lib/Typesense/Override.js create mode 100644 lib/Typesense/Override.js.map create mode 100644 lib/Typesense/Overrides.d.ts create mode 100644 lib/Typesense/Overrides.js create mode 100644 lib/Typesense/Overrides.js.map create mode 100644 lib/Typesense/Preset.d.ts create mode 100644 lib/Typesense/Preset.js create mode 100644 lib/Typesense/Preset.js.map create mode 100644 lib/Typesense/Presets.d.ts create mode 100644 lib/Typesense/Presets.js create mode 100644 lib/Typesense/Presets.js.map create mode 100644 lib/Typesense/RequestWithCache.d.ts create mode 100644 lib/Typesense/RequestWithCache.js create mode 100644 lib/Typesense/RequestWithCache.js.map create mode 100644 lib/Typesense/SearchClient.d.ts create mode 100644 lib/Typesense/SearchClient.js create mode 100644 lib/Typesense/SearchClient.js.map create mode 100644 lib/Typesense/SearchOnlyCollection.d.ts create mode 100644 lib/Typesense/SearchOnlyCollection.js create mode 100644 lib/Typesense/SearchOnlyCollection.js.map create mode 100644 lib/Typesense/SearchOnlyDocuments.d.ts create mode 100644 lib/Typesense/SearchOnlyDocuments.js create mode 100644 lib/Typesense/SearchOnlyDocuments.js.map create mode 100644 lib/Typesense/Stats.d.ts create mode 100644 lib/Typesense/Stats.js create mode 100644 lib/Typesense/Stats.js.map create mode 100644 lib/Typesense/Stemming.d.ts create mode 100644 lib/Typesense/Stemming.js create mode 100644 lib/Typesense/Stemming.js.map create mode 100644 lib/Typesense/StemmingDictionaries.d.ts create mode 100644 lib/Typesense/StemmingDictionaries.js create mode 100644 lib/Typesense/StemmingDictionaries.js.map create mode 100644 lib/Typesense/StemmingDictionary.d.ts create mode 100644 lib/Typesense/StemmingDictionary.js create mode 100644 lib/Typesense/StemmingDictionary.js.map create mode 100644 lib/Typesense/Stopword.d.ts create mode 100644 lib/Typesense/Stopword.js create mode 100644 lib/Typesense/Stopword.js.map create mode 100644 lib/Typesense/Stopwords.d.ts create mode 100644 lib/Typesense/Stopwords.js create mode 100644 lib/Typesense/Stopwords.js.map create mode 100644 lib/Typesense/Synonym.d.ts create mode 100644 lib/Typesense/Synonym.js create mode 100644 lib/Typesense/Synonym.js.map create mode 100644 lib/Typesense/Synonyms.d.ts create mode 100644 lib/Typesense/Synonyms.js create mode 100644 lib/Typesense/Synonyms.js.map create mode 100644 lib/Typesense/Utils.d.ts create mode 100644 lib/Typesense/Utils.js create mode 100644 lib/Typesense/Utils.js.map diff --git a/dist/Typesense.min.js b/dist/Typesense.min.js deleted file mode 100644 index d054c090..00000000 --- a/dist/Typesense.min.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var Ke=Object.create;var fe=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var ye=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ze=(r,e)=>{for(var t in e)fe(r,t,{get:e[t],enumerable:!0})},Le=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of We(e))!je.call(r,s)&&s!==t&&fe(r,s,{get:()=>e[s],enumerable:!(i=Me(e,s))||i.enumerable});return r};var ge=(r,e,t)=>(t=r!=null?Ke(Fe(r)):{},Le(e||!r||!r.__esModule?fe(t,"default",{value:r,enumerable:!0}):t,r));var _e=ye((jt,xe)=>{"use strict";xe.exports={}});var be=ye((zt,Ae)=>{"use strict";Ae.exports={}});var $e=ye((Yr,He)=>{"use strict";He.exports={}});var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel);var Re={};ze(Re,{HTTPError:()=>R,ImportError:()=>g,MissingConfigurationError:()=>f,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>y,ObjectUnprocessable:()=>_,RequestMalformed:()=>A,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype)}};var R=class extends l{};var f=class extends l{};var x=class extends l{};var y=class extends l{};var _=class extends l{};var A=class extends l{};var b=class extends l{};var T=class extends l{};var g=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==void 0&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||_loglevel2.default,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new f("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new f("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new f("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}};var Ee=ge(_e()),we=ge(be());var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var Je="X-TYPESENSE-API-KEY",Ce=!0,Be=!1,Te=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:i=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},s={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:s})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?_axios2.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis):_axios2.default.getAdapter(this.configuration.axiosAdapter):void 0}async performRequest(e,t,{queryParameters:i=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:a=null,responseType:h=void 0,skipConnectionTimeout:m=!1,enableKeepAlive:C=void 0}){this.configuration.validate();let c=Date.now(),S,F=!1;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:j=>j>0,transformResponse:[(j,z)=>{let Pe=j;return z!==void 0&&typeof j=="string"&&z["content-type"]&&z["content-type"].startsWith("application/json")&&(Pe=JSON.parse(j)),Pe}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new Ee.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new we.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(o.data=s),a){let z=_axios2.default.CancelToken.source();Q=()=>{F=!0,z.cancel()},a.addEventListener("abort",Q),o.cancelToken=z.token}let d=await _axios2.default.call(void 0, o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Ce),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,_optionalChain([d, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message]),o.data));throw this.customErrorForResponse(d,_optionalChain([d, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]),o.data)}catch(o){if(F||this.setNodeHealthcheck(P,Be),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${_nullishCoalesce(_optionalChain([o, 'optionalAccess', _6 => _6.code]), () => (""))} ${o.message}${o.response==null?"":" - "+JSON.stringify(_optionalChain([o, 'access', _7 => _7.response, 'optionalAccess', _8 => _8.data]))}"`),F)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Ce)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Ce)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Je]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let s=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(s+=` | Server said: ${t}`);let n=new l(s,i,e.status);return e.status===400?n=new A(s):e.status===401?n=new b(s):e.status===404?n=new y(s):e.status===409?n=new x(s):e.status===422?n=new _(s):e.status>=500&&e.status<=599?n=new T(s):n=new R(s),n}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,i,s){let{cacheResponseForSeconds:n=120,maxSize:a=100}=s;if(n<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o)}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o)}return v}};var Se="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(Se,e,t)}async retrieve(e={}){return this.apiCall.get(Se,e)}static get RESOURCEPATH(){return Se}};var Oe="/documents",L=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);let n=u(e),a=Object.assign({},s,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Oe}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var ve={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},Ne=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,N=class extends L{constructor(e,t,i){super(e,t,i)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(n=>JSON.stringify(n)).join(` -`)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} - It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object - - Please try reducing the number of keys in your document, or using CURL to import your data. - `):new Error(n)}else i=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne});if(Array.isArray(e)){let n=s.split(` -`).map(h=>JSON.parse(h)),a=n.filter(h=>h.success===!1);if(a.length>0)throw new g(`${n.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:n.length-a.length});return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne})).split(` -`).map(a=>JSON.parse(a)),n=s.filter(a=>a.success===!1);if(n.length>0)throw new g(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:e,options:t,failedItems:n,successCount:s.length-n.length});return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function De(r){return Object.keys(ve).filter(e=>r[e]!==void 0).every(e=>Ve(r[e]))}function u(r){let e={...r};if(!Object.keys(ve).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&De(e))return e;if(!De(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Ve(r){return!Array.isArray(r)}var Ye="/multi_search",D=class{constructor(e,t,i=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let a={...t,...n},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ye,h,m,s],{cacheResponseForSeconds:i})}};var me=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new L(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var de=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Ge="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ge}};var J=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var Xe="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Xe}};var B=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var he=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${N.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var V=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new N(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof y)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new he(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new J(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new B(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ue="/aliases",$=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(Ue)}endpointPath(e){return`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ue}};var Y=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ie=ge($e());var qe="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(qe)}generateScopedSearchKey(e,t){let i=u(t),s=JSON.stringify(i),n=Buffer.from((0,Ie.createHmac)("sha256",e).update(s).digest("base64")),a=e.substr(0,4),h=`${n}${a}${s}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var Ze="/debug",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ze)}};var et="/metrics.json",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(et)}};var tt="/stats.json",ee=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(tt)}};var rt="/health",te=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(rt)}};var it="/operations",re=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${it}/${e}`,{},t)}};var st="/presets",I=class r{constructor(e){this.apiCall=e}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let s=t.value.searches.map(n=>u(n));return this.apiCall.put(this.endpointPath(e),{value:{searches:s}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return st}};var ie=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var nt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return nt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ot="/analytics/events",ne=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ot}};var at="/analytics",oe=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new ne(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return at}};var lt="/stopwords",K=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var ae=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var ct="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var le=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ke="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall)}async retrieve(){return this.apiCall.get(ke)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new le(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return ke}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ue=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new X(this.apiCall),this.metrics=new Z(this.apiCall),this.stats=new ee(this.apiCall),this.health=new te(this.apiCall),this.operations=new re(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new oe(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new V(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new Y(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new G(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new ie(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ae(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ce(e,this.apiCall)),this.individualConversations[e])}};exports.Client = ue; exports.Errors = Re; exports.SearchClient = de; -//# sourceMappingURL=Typesense.min.js.map \ No newline at end of file diff --git a/dist/Typesense.min.js.map b/dist/Typesense.min.js.map deleted file mode 100644 index 810ec55d..00000000 --- a/dist/Typesense.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["/home/fanis/code/typesense/js-lib/dist/Typesense.min.js","node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/Alias.ts"],"names":["require_http","__commonJSMin","exports","module","require_https","require_crypto","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","httpBody","httpStatus","importResults","payload","Configuration","options","node","logger","key","array","i","j","import_http","import_https","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted"],"mappings":"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","file":"/home/fanis/code/typesense/js-lib/dist/Typesense.min.js","sourcesContent":[null,"module.exports = {}","module.exports = {}","module.exports = {}","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n"]} \ No newline at end of file diff --git a/dist/Typesense.min.mjs b/dist/Typesense.min.mjs deleted file mode 100644 index c303ec55..00000000 --- a/dist/Typesense.min.mjs +++ /dev/null @@ -1,9 +0,0 @@ -var Ke=Object.create;var fe=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var ye=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ze=(r,e)=>{for(var t in e)fe(r,t,{get:e[t],enumerable:!0})},Le=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of We(e))!je.call(r,s)&&s!==t&&fe(r,s,{get:()=>e[s],enumerable:!(i=Me(e,s))||i.enumerable});return r};var ge=(r,e,t)=>(t=r!=null?Ke(Fe(r)):{},Le(e||!r||!r.__esModule?fe(t,"default",{value:r,enumerable:!0}):t,r));var _e=ye((jt,xe)=>{"use strict";xe.exports={}});var be=ye((zt,Ae)=>{"use strict";Ae.exports={}});var $e=ye((Yr,He)=>{"use strict";He.exports={}});import Qe from"loglevel";var Re={};ze(Re,{HTTPError:()=>R,ImportError:()=>g,MissingConfigurationError:()=>f,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>y,ObjectUnprocessable:()=>_,RequestMalformed:()=>A,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype)}};var R=class extends l{};var f=class extends l{};var x=class extends l{};var y=class extends l{};var _=class extends l{};var A=class extends l{};var b=class extends l{};var T=class extends l{};var g=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==void 0&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||Qe,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new f("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new f("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new f("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}};var Ee=ge(_e()),we=ge(be());import pe from"axios";var Je="X-TYPESENSE-API-KEY",Ce=!0,Be=!1,Te=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:i=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},s={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:s})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?pe.getAdapter(this.configuration.axiosAdapter).bind(globalThis):pe.getAdapter(this.configuration.axiosAdapter):void 0}async performRequest(e,t,{queryParameters:i=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:a=null,responseType:h=void 0,skipConnectionTimeout:m=!1,enableKeepAlive:C=void 0}){this.configuration.validate();let c=Date.now(),S,F=!1;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:j=>j>0,transformResponse:[(j,z)=>{let Pe=j;return z!==void 0&&typeof j=="string"&&z["content-type"]&&z["content-type"].startsWith("application/json")&&(Pe=JSON.parse(j)),Pe}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new Ee.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new we.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(o.data=s),a){let z=pe.CancelToken.source();Q=()=>{F=!0,z.cancel()},a.addEventListener("abort",Q),o.cancelToken=z.token}let d=await pe(o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Ce),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,d.data?.message,o.data));throw this.customErrorForResponse(d,d.data?.message,o.data)}catch(o){if(F||this.setNodeHealthcheck(P,Be),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${o?.code??""} ${o.message}${o.response==null?"":" - "+JSON.stringify(o.response?.data)}"`),F)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Ce)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Ce)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Je]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let s=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(s+=` | Server said: ${t}`);let n=new l(s,i,e.status);return e.status===400?n=new A(s):e.status===401?n=new b(s):e.status===404?n=new y(s):e.status===409?n=new x(s):e.status===422?n=new _(s):e.status>=500&&e.status<=599?n=new T(s):n=new R(s),n}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,i,s){let{cacheResponseForSeconds:n=120,maxSize:a=100}=s;if(n<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o)}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o)}return v}};var Se="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(Se,e,t)}async retrieve(e={}){return this.apiCall.get(Se,e)}static get RESOURCEPATH(){return Se}};var Oe="/documents",L=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);let n=u(e),a=Object.assign({},s,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Oe}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var ve={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},Ne=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,N=class extends L{constructor(e,t,i){super(e,t,i)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(n=>JSON.stringify(n)).join(` -`)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} - It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object - - Please try reducing the number of keys in your document, or using CURL to import your data. - `):new Error(n)}else i=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne});if(Array.isArray(e)){let n=s.split(` -`).map(h=>JSON.parse(h)),a=n.filter(h=>h.success===!1);if(a.length>0)throw new g(`${n.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:n.length-a.length});return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne})).split(` -`).map(a=>JSON.parse(a)),n=s.filter(a=>a.success===!1);if(n.length>0)throw new g(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:e,options:t,failedItems:n,successCount:s.length-n.length});return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function De(r){return Object.keys(ve).filter(e=>r[e]!==void 0).every(e=>Ve(r[e]))}function u(r){let e={...r};if(!Object.keys(ve).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&De(e))return e;if(!De(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Ve(r){return!Array.isArray(r)}var Ye="/multi_search",D=class{constructor(e,t,i=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let a={...t,...n},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ye,h,m,s],{cacheResponseForSeconds:i})}};var me=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new L(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var de=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Ge="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ge}};var J=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var Xe="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Xe}};var B=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var he=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${N.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var V=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new N(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof y)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new he(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new J(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new B(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ue="/aliases",$=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(Ue)}endpointPath(e){return`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ue}};var Y=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ie=ge($e());var qe="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(qe)}generateScopedSearchKey(e,t){let i=u(t),s=JSON.stringify(i),n=Buffer.from((0,Ie.createHmac)("sha256",e).update(s).digest("base64")),a=e.substr(0,4),h=`${n}${a}${s}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var Ze="/debug",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ze)}};var et="/metrics.json",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(et)}};var tt="/stats.json",ee=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(tt)}};var rt="/health",te=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(rt)}};var it="/operations",re=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${it}/${e}`,{},t)}};var st="/presets",I=class r{constructor(e){this.apiCall=e}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let s=t.value.searches.map(n=>u(n));return this.apiCall.put(this.endpointPath(e),{value:{searches:s}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return st}};var ie=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var nt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return nt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ot="/analytics/events",ne=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ot}};var at="/analytics",oe=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new ne(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return at}};var lt="/stopwords",K=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var ae=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var ct="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var le=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ke="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall)}async retrieve(){return this.apiCall.get(ke)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new le(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return ke}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ue=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new X(this.apiCall),this.metrics=new Z(this.apiCall),this.stats=new ee(this.apiCall),this.health=new te(this.apiCall),this.operations=new re(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new oe(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new V(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new Y(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new G(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new ie(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ae(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ce(e,this.apiCall)),this.individualConversations[e])}};export{ue as Client,Re as Errors,de as SearchClient}; -//# sourceMappingURL=Typesense.min.mjs.map \ No newline at end of file diff --git a/dist/Typesense.min.mjs.map b/dist/Typesense.min.mjs.map deleted file mode 100644 index 9f18da6b..00000000 --- a/dist/Typesense.min.mjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/Collections.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Utils.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/Client.ts"],"sourcesContent":["module.exports = {}","module.exports = {}","module.exports = {}","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"],"mappings":"klBAAA,IAAAA,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAAAA,GAAO,QAAU,CAAC,ICAlB,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAAAA,GAAO,QAAU,CAAC,ICAlB,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAAAA,GAAO,QAAU,CAAC,ICAlB,OAAOC,OAAY,WCAnB,IAAAC,GAAA,GAAAC,GAAAD,GAAA,eAAAE,EAAA,gBAAAC,EAAA,8BAAAC,EAAA,wBAAAC,EAAA,mBAAAC,EAAA,wBAAAC,EAAA,qBAAAC,EAAA,wBAAAC,EAAA,gBAAAC,EAAA,mBAAAC,ICAA,IAAqBC,EAArB,cAA4C,KAAM,CAKhD,YAAYC,EAAkBC,EAAmBC,EAAqB,CACpE,MAAMF,CAAO,EACb,KAAK,KAAO,WAAW,KACvB,KAAK,SAAWC,EAChB,KAAK,WAAaC,EAClB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,ECVA,IAAqBC,EAArB,cAAuCC,CAAe,CAAC,ECAvD,IAAqBC,EAArB,cAAuDC,CAAe,CAAC,ECAvE,IAAqBC,EAArB,cAAiDC,CAAe,CAAC,ECAjE,IAAqBC,EAArB,cAA4CC,CAAe,CAAC,ECA5D,IAAqBC,EAArB,cAAiDC,CAAe,CAAC,ECAjE,IAAqBC,EAArB,cAA8CC,CAAe,CAAC,ECA9D,IAAqBC,EAArB,cAAiDC,CAAe,CAAC,ECAjE,IAAqBC,EAArB,cAAyCC,CAAe,CAAC,ECSzD,IAAqBC,EAArB,cAAyCC,CAAe,CAGtD,YACEC,EACAC,EACAC,EACA,CACA,MAAMF,CAAO,EACb,KAAK,cAAgBC,EACrB,KAAK,QAAUC,CACjB,CACF,EXwFA,IAAqBC,EAArB,KAAmC,CAyBjC,YAAYC,EAA+B,CACzC,KAAK,MAAQA,EAAQ,OAAS,CAAC,EAC/B,KAAK,MAAQ,KAAK,MACf,IAAKC,GAAS,KAAK,qBAAqBA,CAAI,CAAC,EAC7C,IAAKA,GAAS,KAAK,qBAAqBA,CAAI,CAAC,EAC7C,IAAKA,IAAU,CAAE,GAAGA,CAAK,EAAE,EAE1BD,EAAQ,gBAAkB,OAC5BA,EAAQ,eAAiB,IAGvBA,EAAQ,iBAAmB,IAC7B,KAAK,aAAa,KAAK,KAAK,EAG9B,KAAK,YAAcA,EAAQ,YAC3B,KAAK,YAAc,KAAK,qBAAqB,KAAK,WAAW,EAC7D,KAAK,YAAc,KAAK,qBAAqB,KAAK,WAAW,EAE7D,KAAK,yBACHA,EAAQ,0BAA4BA,EAAQ,gBAAkB,EAChE,KAAK,2BAA6BA,EAAQ,4BAA8B,GACxE,KAAK,YACFA,EAAQ,aAAe,QAAaA,EAAQ,YAAc,EACvDA,EAAQ,WACR,KAAK,MAAM,QAAU,KAAK,aAAe,KAAO,EAAI,KAAO,EACjE,KAAK,qBAAuBA,EAAQ,sBAAwB,GAE5D,KAAK,OAASA,EAAQ,OACtB,KAAK,uBAAyBA,EAAQ,uBAEtC,KAAK,6BACHA,EAAQ,8BAAgC,EAC1C,KAAK,yBAA2BA,EAAQ,0BAA4B,GAEpE,KAAK,aAAeA,EAAQ,aAC5B,KAAK,OAASA,EAAQ,QAAUE,GAChC,KAAK,SAAWF,EAAQ,UAAY,OACpC,KAAK,OAAO,SAAS,KAAK,QAAQ,EAElC,KAAK,kBAAoBA,EAAQ,kBAEjC,KAAK,UAAYA,EAAQ,UACzB,KAAK,WAAaA,EAAQ,WAE1B,KAAK,iBAAmBA,EAAQ,iBAEhC,KAAK,wBAAwBA,CAAO,EACpC,KAAK,SAAS,CAChB,CAEA,UAAoB,CAClB,GAAI,KAAK,OAAS,MAAQ,KAAK,MAAM,SAAW,GAAK,KAAK,cAAc,EACtE,MAAM,IAAIG,EACR,qEACF,EAGF,GACE,KAAK,aAAe,MACpB,KAAK,2BAA2B,KAAK,WAAW,EAEhD,MAAM,IAAIA,EACR,oFACF,EAGF,GAAI,KAAK,QAAU,KACjB,MAAM,IAAIA,EAA0B,2BAA2B,EAGjE,MAAO,EACT,CAEQ,eAAyB,CAC/B,OAAO,KAAK,MAAM,KAAMF,GACf,KAAK,2BAA2BA,CAAI,CAC5C,CACH,CAEQ,2BACNA,EAIS,CACT,MACE,CAAC,CAAC,WAAY,OAAQ,OAAQ,MAAM,EAAE,MAAOG,GACpCH,EAAK,eAAeG,CAAG,CAC/B,GAAKH,EAAK,KAAU,IAEzB,CAEQ,qBACNA,EASY,CACZ,OAAIA,GAAQ,MAAQ,CAACA,EAAK,eAAe,MAAM,IAC7CA,EAAK,KAAU,IAEVA,CACT,CAEQ,qBACNA,EASY,CACZ,GACEA,GAAQ,MACR,CAACA,EAAK,eAAe,MAAM,GAC3BA,EAAK,eAAe,UAAU,EAE9B,OAAQA,EAAK,SAAa,CACxB,IAAK,QACHA,EAAK,KAAU,IACf,MACF,IAAK,OACHA,EAAK,KAAU,GACf,KACJ,CAEF,OAAOA,CACT,CAEQ,wBAAwBD,EAAqC,CAC/DA,EAAQ,gBACV,KAAK,OAAO,KACV,gFACF,EAEEA,EAAQ,YACV,KAAK,OAAO,KACV,oGACF,EAEEA,EAAQ,kBACV,KAAK,OAAO,KACV,0GACF,CAEJ,CAEQ,aAAaK,EAAO,CAC1B,QAASC,EAAID,EAAM,OAAS,EAAGC,EAAI,EAAGA,IAAK,CACzC,IAAMC,EAAI,KAAK,MAAM,KAAK,OAAO,GAAKD,EAAI,EAAE,EAC5C,CAACD,EAAMC,CAAC,EAAGD,EAAME,CAAC,CAAC,EAAI,CAACF,EAAME,CAAC,EAAGF,EAAMC,CAAC,CAAC,CAC5C,CACF,CACF,EYnSA,IAAAE,GAAmC,SACnCC,GAAoC,SAFpC,OAAOC,OAAW,QAgBlB,IAAMC,GAAmB,sBACnBC,GAAU,GACVC,GAAY,GAOZC,GACJ,OAAO,QAAY,KACnB,QAAQ,UAAY,MACpB,QAAQ,SAAS,MAAQ,KAENC,EAArB,KAA6B,CAc3B,YAAoBC,EAA8B,CAA9B,mBAAAA,EAClB,KAAK,OAAS,KAAK,cAAc,OACjC,KAAK,MACH,KAAK,cAAc,OAAS,KACxB,KAAK,cAAc,MACnB,KAAK,MAAM,KAAK,UAAU,KAAK,cAAc,KAAK,CAAC,EACzD,KAAK,YACH,KAAK,cAAc,aAAe,KAC9B,KAAK,cAAc,YACnB,KAAK,MAAM,KAAK,UAAU,KAAK,cAAc,WAAW,CAAC,EAC/D,KAAK,yBAA2B,KAAK,cAAc,yBACnD,KAAK,2BACH,KAAK,cAAc,2BACrB,KAAK,qBAAuB,KAAK,cAAc,WAC/C,KAAK,qBAAuB,KAAK,cAAc,qBAC/C,KAAK,uBAAyB,KAAK,cAAc,uBACjD,KAAK,sBAAwB,KAAK,cAAc,kBAEhD,KAAK,OAAS,KAAK,cAAc,OAEjC,KAAK,2BAA2B,EAChC,KAAK,iBAAmB,EAC1B,CAEA,MAAM,IACJC,EACAC,EAAuB,CAAC,EACxB,CACE,YAAAC,EAAc,KACd,aAAAC,EAAe,MACjB,EAGI,CAAC,EACO,CACZ,OAAO,KAAK,eAAkB,MAAOH,EAAU,CAC7C,gBAAAC,EACA,YAAAC,EACA,aAAAC,CACF,CAAC,CACH,CAEA,MAAM,OAAUH,EAAkBC,EAAuB,CAAC,EAAe,CACvE,OAAO,KAAK,eAAkB,SAAUD,EAAU,CAAE,gBAAAC,CAAgB,CAAC,CACvE,CAEA,MAAM,KACJD,EACAI,EAAsB,CAAC,EACvBH,EAAuB,CAAC,EACxBI,EAAyB,CAAC,EACd,CACZ,OAAO,KAAK,eAAkB,OAAQL,EAAU,CAC9C,gBAAAC,EACA,eAAAG,EACA,kBAAAC,CACF,CAAC,CACH,CAEA,MAAM,IACJL,EACAI,EAAsB,CAAC,EACvBH,EAAuB,CAAC,EACZ,CACZ,OAAO,KAAK,eAAkB,MAAOD,EAAU,CAC7C,gBAAAC,EACA,eAAAG,CACF,CAAC,CACH,CAEA,MAAM,MACJJ,EACAI,EAAsB,CAAC,EACvBH,EAAuB,CAAC,EACZ,CACZ,OAAO,KAAK,eAAkB,QAASD,EAAU,CAC/C,gBAAAC,EACA,eAAAG,CACF,CAAC,CACH,CAEQ,YAAuC,CAC7C,OAAK,KAAK,cAAc,aAEpB,OAAO,KAAK,cAAc,cAAiB,WACtC,KAAK,cAAc,aAG1B,OAAO,UAAc,KACrB,UAAU,YAAc,qBAGtBE,GAAM,WAAW,KAAK,cAAc,YAAY,EAAE,KAAK,UAAU,EACjEA,GAAM,WAAW,KAAK,cAAc,YAAY,EAXd,MAYxC,CAEA,MAAM,eACJC,EACAP,EACA,CACE,gBAAAC,EAAkB,KAClB,eAAAG,EAAiB,KACjB,kBAAAC,EAAoB,CAAC,EACrB,YAAAH,EAAc,KACd,aAAAC,EAAe,OACf,sBAAAK,EAAwB,GACxB,gBAAAC,EAAkB,MACpB,EASY,CACZ,KAAK,cAAc,SAAS,EAE5B,IAAMC,EAAgB,KAAK,IAAI,EAC3BC,EACAC,EAAa,GACjB,KAAK,OAAO,MACV,YAAYF,CAAa,gBAAgBH,EAAY,YAAY,CAAC,aAAaP,CAAQ,EACzF,EACA,QACMa,EAAW,EACfA,GAAY,KAAK,qBAAuB,EACxCA,IACA,CACA,IAAMC,EAAO,KAAK,YAAYJ,CAAa,EAO3C,GANA,KAAK,OAAO,MACV,YAAYA,CAAa,gBAAgBH,EAAY,YAAY,CAAC,iBAAiBM,CAAQ,YACzFC,EAAK,KACP,EACF,EAEIZ,GAAeA,EAAY,QAC7B,OAAO,QAAQ,OAAO,IAAI,MAAM,4BAA4B,CAAC,EAG/D,IAAIa,EAEJ,GAAI,CACF,IAAMC,EAA6C,CACjD,QAAS,KAAK,WAAW,EACzB,OAAQT,EACR,IAAK,KAAK,OAAOP,EAAUc,CAAI,EAC/B,QAAS,OAAO,OACd,CAAC,EACD,KAAK,eAAe,EACpBT,EACA,KAAK,qBACP,EACA,iBAAkB,IAClB,cAAe,IACf,aAAAF,EACA,eAAiBc,GAKRA,EAAS,EAElB,kBAAmB,CACjB,CAACC,EAAMC,IAAY,CACjB,IAAIC,GAAkBF,EACtB,OACEC,IAAY,QACZ,OAAOD,GAAS,UAChBC,EAAQ,cAAc,GACtBA,EAAQ,cAAc,EAAE,WAAW,kBAAkB,IAErDC,GAAkB,KAAK,MAAMF,CAAI,GAE5BE,EACT,CACF,CACF,EAiEA,GA/DIZ,IAA0B,KAC5BQ,EAAe,QAAU,KAAK,yBAA2B,KAGvDf,GAAmB,OAAO,KAAKA,CAAe,EAAE,SAAW,IAC7De,EAAe,OAASf,GAGtB,KAAK,yBACPe,EAAe,OAASA,EAAe,QAAU,CAAC,EAClDA,EAAe,OAAO,qBAAqB,EAAI,KAAK,QAGlD,KAAK,cAAc,WACrB,KAAK,OAAO,MACV,YAAYN,CAAa,0BAC3B,EACAM,EAAe,UAAY,KAAK,cAAc,WACrCP,IAAoB,KACxBZ,IAKH,KAAK,OAAO,MAAM,YAAYa,CAAa,sBAAsB,EACjEM,EAAe,UAAY,IAAI,GAAAK,MAAU,CAAE,UAAW,EAAK,CAAC,GAL5D,KAAK,OAAO,KACV,YAAYX,CAAa,4EAC3B,GAOA,KAAK,cAAc,YACrB,KAAK,OAAO,MACV,YAAYA,CAAa,2BAC3B,EACAM,EAAe,WAAa,KAAK,cAAc,YACtCP,IAAoB,KACxBZ,IAKH,KAAK,OAAO,MAAM,YAAYa,CAAa,sBAAsB,EACjEM,EAAe,WAAa,IAAI,GAAAM,MAAW,CAAE,UAAW,EAAK,CAAC,GAL9D,KAAK,OAAO,KACV,YAAYZ,CAAa,4EAC3B,GAOA,KAAK,cAAc,mBACrB,KAAK,OAAO,MACV,YAAYA,CAAa,iCAC3B,EACAM,EAAe,iBAAmB,KAAK,cAAc,kBAIrDZ,IACE,OAAOA,GAAmB,UAC1BA,EAAe,SAAW,GACzB,OAAOA,GAAmB,UACzB,OAAO,KAAKA,CAAc,EAAE,SAAW,KAE3CY,EAAe,KAAOZ,GAIpBF,EAAa,CAEf,IAAMqB,EADcjB,GAAM,YACC,OAAO,EAClCS,EAAgB,IAAM,CACpBH,EAAa,GACbW,EAAO,OAAO,CAChB,EACArB,EAAY,iBAAiB,QAASa,CAAa,EACnDC,EAAe,YAAcO,EAAO,KACtC,CAEA,IAAMC,EAAW,MAAMlB,GAAMU,CAAc,EAU3C,GATIQ,EAAS,QAAU,GAAKA,EAAS,QAAU,KAG7C,KAAK,mBAAmBV,EAAMnB,EAAO,EAEvC,KAAK,OAAO,MACV,YAAYe,CAAa,qBAAqBI,EAAK,KAAK,gCAAgCU,EAAS,MAAM,GACzG,EAEIA,EAAS,QAAU,KAAOA,EAAS,OAAS,IAE9C,OAAO,QAAQ,QAAQA,EAAS,IAAI,EAC/B,GAAIA,EAAS,OAAS,IAE3B,OAAO,QAAQ,OACb,KAAK,uBACHA,EACAA,EAAS,MAAM,QACfR,EAAe,IACjB,CACF,EAIA,MAAM,KAAK,uBACTQ,EACAA,EAAS,MAAM,QACfR,EAAe,IACjB,CAEJ,OAASS,EAAY,CAgBnB,GAdKb,GACH,KAAK,mBAAmBE,EAAMlB,EAAS,EAEzCe,EAAgBc,EAChB,KAAK,OAAO,KACV,YAAYf,CAAa,qBACvBI,EAAK,KACP,mBAAmBW,GAAO,MAAQ,EAAE,IAAIA,EAAM,OAAO,GACnDA,EAAM,UAAY,KACd,GACA,MAAQ,KAAK,UAAUA,EAAM,UAAU,IAAI,CACjD,GACF,EAEIb,EACF,OAAO,QAAQ,OAAO,IAAI,MAAM,4BAA4B,CAAC,EAE3DC,EAAW,KAAK,qBAAuB,GACzC,KAAK,OAAO,KACV,YAAYH,CAAa,kBAAkB,KAAK,oBAAoB,gCACtE,EAEF,MAAM,KAAK,MAAM,KAAK,oBAAoB,CAC5C,QAAE,CACIR,GAAea,GACjBb,EAAY,oBAAoB,QAASa,CAAa,CAE1D,CACF,CACA,YAAK,OAAO,MACV,YAAYL,CAAa,uCAC3B,EACO,QAAQ,OAAOC,CAAa,CACrC,CAKA,YAAYD,EAAgB,EAAS,CAEnC,GAAI,KAAK,aAAe,KAAM,CAM5B,GALA,KAAK,OAAO,MACV,YAAYA,CAAa,wBACvB,KAAK,YAAY,KACnB,OAAO,KAAK,YAAY,YAAc,GAAO,UAAY,WAAW,EACtE,EAEE,KAAK,YAAY,YAAc,IAC/B,KAAK,sBAAsB,KAAK,YAAaA,CAAa,EAE1D,YAAK,OAAO,MACV,YAAYA,CAAa,kCAAkC,KAAK,YAAY,KAAK,EACnF,EACO,KAAK,YAEd,KAAK,OAAO,MACV,YAAYA,CAAa,oCAC3B,CACF,CAGA,KAAK,OAAO,MACV,YAAYA,CAAa,mBAAmB,KAAK,MAC9C,IACEI,GACC,QAAQA,EAAK,KAAK,OAChBA,EAAK,YAAc,GAAO,UAAY,WACxC,EACJ,EACC,KAAK,MAAM,CAAC,EACjB,EACA,IAAIY,EAAsB,KAAK,MAAM,CAAC,EACtC,QAAS,EAAI,EAAG,GAAK,KAAK,MAAM,OAAQ,IAGtC,GAFA,KAAK,kBAAoB,KAAK,iBAAmB,GAAK,KAAK,MAAM,OACjEA,EAAgB,KAAK,MAAM,KAAK,gBAAgB,EAE9CA,EAAc,YAAc,IAC5B,KAAK,sBAAsBA,EAAehB,CAAa,EAEvD,YAAK,OAAO,MACV,YAAYA,CAAa,kCAAkCgB,EAAc,KAAK,EAChF,EACOA,EAMX,YAAK,OAAO,MACV,YAAYhB,CAAa,gEAAgEgB,EAAc,KAAK,EAC9G,EACOA,CACT,CAEA,sBAAsBZ,EAAMJ,EAAgB,EAAY,CACtD,IAAMiB,EACJ,KAAK,IAAI,EAAIb,EAAK,oBAClB,KAAK,2BAA6B,IACpC,OAAIa,GACF,KAAK,OAAO,MACV,YAAYjB,CAAa,UAAUI,EAAK,KAAK,8CAA8C,KAAK,0BAA0B,iCAC5H,EAEKa,CACT,CAEA,4BAAmC,CAC7B,KAAK,aAAe,OACtB,KAAK,YAAY,MAAQ,cACzB,KAAK,mBAAmB,KAAK,YAAahC,EAAO,GAGnD,KAAK,MAAM,QAAQ,CAACmB,EAAMc,IAAM,CAC9Bd,EAAK,MAAQc,EACb,KAAK,mBAAmBd,EAAMnB,EAAO,CACvC,CAAC,CACH,CAEA,mBAAmBmB,EAAMe,EAAiB,CACxCf,EAAK,UAAYe,EACjBf,EAAK,oBAAsB,KAAK,IAAI,CACtC,CAEA,OAAOd,EAAkBc,EAAc,CACrC,OAAIA,EAAK,KAAO,KACP,GAAGA,EAAK,GAAG,GAAGd,CAAQ,GAExB,GAAGc,EAAK,QAAQ,MAAMA,EAAK,IAAI,IAAIA,EAAK,IAAI,GAAGA,EAAK,IAAI,GAAGd,CAAQ,EAC5E,CAEA,gBAAsB,CACpB,IAAM8B,EAAiB,CAAC,EACxB,OAAK,KAAK,yBACRA,EAAepC,EAAgB,EAAI,KAAK,QAE1CoC,EAAe,cAAc,EAAI,mBAC1BA,CACT,CAEA,MAAM,MAAMC,EAAwB,CAClC,OAAO,IAAI,QAASC,GAAY,WAAWA,EAASD,EAAU,GAAI,CAAC,CACrE,CAEA,uBACEP,EACAS,EACAC,EACgB,CAChB,IAAIC,EAAe,iCAAiCX,EAAS,MAAM,GAEjE,OAAOS,GAAsB,UAC7BA,EAAkB,KAAK,IAAM,KAE7BE,GAAgB,mBAAmBF,CAAiB,IAGtD,IAAIR,EAAQ,IAAIW,EAAeD,EAAcD,EAAUV,EAAS,MAAM,EAEtE,OAAIA,EAAS,SAAW,IACtBC,EAAQ,IAAIY,EAAiBF,CAAY,EAChCX,EAAS,SAAW,IAC7BC,EAAQ,IAAIa,EAAoBH,CAAY,EACnCX,EAAS,SAAW,IAC7BC,EAAQ,IAAIc,EAAeJ,CAAY,EAC9BX,EAAS,SAAW,IAC7BC,EAAQ,IAAIe,EAAoBL,CAAY,EACnCX,EAAS,SAAW,IAC7BC,EAAQ,IAAIgB,EAAoBN,CAAY,EACnCX,EAAS,QAAU,KAAOA,EAAS,QAAU,IACtDC,EAAQ,IAAIiB,EAAYP,CAAY,EAEpCV,EAAQ,IAAIkB,EAAUR,CAAY,EAG7BV,CACT,CACF,EC9fA,IAAqBmB,EAArB,KAAsC,CAAtC,cACE,KAAQ,cAAkC,IAAI,IAC9C,KAAQ,qBAAyC,IAAI,IAErD,YAAa,CACX,KAAK,cAAgB,IAAI,IACzB,KAAK,qBAAuB,IAAI,GAClC,CAGA,MAAM,QACJC,EACAC,EACAC,EACAC,EACsB,CACtB,GAAM,CACJ,wBAAAC,EAA0B,IAC1B,QAAAC,EAAU,GACZ,EAAIF,EAGJ,GAFwBC,GAA2B,GAAKC,GAAW,EAGjE,OAAOJ,EAAgB,KAAKD,EAAgB,GAAGE,CAAwB,EAGzE,IAAMI,EAA+B,KAAK,UACxCJ,CACF,EACMK,EAAa,KAAK,cAAc,IAAID,CAA4B,EAChEE,EAAM,KAAK,IAAI,EAErB,GAAID,EAAY,CAGd,GADEC,EAAMD,EAAW,iBAAmBH,EAA0B,IAE9D,YAAK,cAAc,OAAOE,CAA4B,EACtD,KAAK,cAAc,IAAIA,EAA8BC,CAAU,EACxD,QAAQ,QAAQA,EAAW,QAAQ,EAE1C,KAAK,cAAc,OAAOD,CAA4B,CAE1D,CAEA,IAAMG,EAAoB,KAAK,qBAAqB,IAClDH,CACF,EAEA,GAAIG,EAAmB,CAIrB,GAFED,EAAMC,EAAkB,iBACxBL,EAA0B,IAE1B,YAAK,qBAAqB,OAAOE,CAA4B,EAC7D,KAAK,qBAAqB,IACxBA,EACAG,CACF,EACOA,EAAkB,gBAEzB,KAAK,qBAAqB,OAAOH,CAA4B,CAEjE,CAEA,IAAMI,EAAkBT,EAAgB,KACtCD,EACA,GAAGE,CACL,EACA,KAAK,qBAAqB,IAAII,EAA8B,CAC1D,iBAAkBE,EAClB,gBAAAE,CACF,CAAC,EAED,IAAMC,EAAW,MAAMD,EAOvB,GANA,KAAK,cAAc,IAAIJ,EAA8B,CACnD,iBAAkBE,EAClB,SAAAG,CACF,CAAC,EAE0B,KAAK,cAAc,KAAON,EAC7B,CACtB,IAAMO,EAAc,KAAK,cAAc,KAAK,EAAE,KAAK,EAAE,MACjDA,GACF,KAAK,cAAc,OAAOA,CAAW,CAEzC,CAGA,GADE,KAAK,qBAAqB,KAAOP,EACI,CACrC,IAAMO,EAAc,KAAK,qBAAqB,KAAK,EAAE,KAAK,EAAE,MACxDA,GACF,KAAK,qBAAqB,OAAOA,CAAW,CAEhD,CACA,OAAOD,CACT,CACF,EC3EA,IAAME,GAAe,eAEAC,EAArB,KAAiC,CAC/B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,OACJC,EACAC,EAAmC,CAAC,EACT,CAC3B,OAAO,KAAK,QAAQ,KAAuBJ,GAAcG,EAAQC,CAAO,CAC1E,CAEA,MAAM,SACJA,EAAsC,CAAC,EACV,CAC7B,OAAO,KAAK,QAAQ,IAAwBJ,GAAcI,CAAO,CACnE,CAEA,WAAW,cAAe,CACxB,OAAOJ,EACT,CACF,EC/BA,IAAMK,GAAe,aAERC,EAAN,KAEP,CAGE,YACYC,EACAC,EACAC,EACV,CAHU,oBAAAF,EACA,aAAAC,EACA,mBAAAC,EALZ,KAAU,iBAAqC,IAAIC,CAMhD,CAEH,YAAa,CACX,KAAK,iBAAiB,WAAW,CACnC,CAEA,MAAM,OACJC,EACA,CACE,6BAAAC,EAA+B,KAAK,cACjC,6BACH,YAAAC,EAAc,IAChB,EAAmB,CAAC,EACQ,CAC5B,IAAMC,EAAwB,CAAC,EAC3B,KAAK,cAAc,2BAA6B,KAClDA,EAAsB,UAAe,IAEvC,IAAMC,EAAmBC,EAAyBL,CAAgB,EAC5DM,EAAc,OAAO,OACzB,CAAC,EACDH,EACAC,CACF,EAEA,OAAO,KAAK,iBAAiB,QAC3B,KAAK,QACL,KAAK,QAAQ,IACb,CAAC,KAAK,aAAa,QAAQ,EAAGE,EAAa,CAAE,YAAAJ,CAAY,CAAC,EAC1D,CACE,wBAAyBD,CAC3B,CACF,CACF,CAEU,aAAaM,EAAoB,CACzC,MAAO,GAAGC,EAAY,YAAY,IAAI,KAAK,cAAc,GAAGd,EAAY,GACtEa,IAAc,OAAY,GAAK,IAAMA,CACvC,EACF,CAEA,WAAW,cAAe,CACxB,OAAOb,EACT,CACF,ECAO,IAAMe,GAAkC,CAC7C,SAAU,WACV,iBAAkB,mBAClB,SAAU,WACV,SAAU,WACV,eAAgB,iBAChB,eAAgB,iBAChB,iBAAkB,mBAClB,sBAAuB,wBACvB,YAAa,cACb,YAAa,cACb,MAAO,QACP,cAAe,gBACf,UAAW,YACX,OAAQ,SACR,QAAS,SACX,EAuNMC,GACJ,OAAO,QAAY,KACnB,QAAQ,UAAY,MACpB,QAAQ,SAAS,MAAQ,KAENC,EAArB,cACUC,CAEV,CACE,YACEC,EACAC,EACAC,EACA,CACA,MAAMF,EAAgBC,EAASC,CAAa,CAC9C,CAEA,MAAM,OAAOC,EAAaC,EAAmC,CAAC,EAAe,CAC3E,GAAI,CAACD,EAAU,MAAM,IAAI,MAAM,sBAAsB,EACrD,OAAO,KAAK,QAAQ,KAAQ,KAAK,aAAa,EAAGA,EAAUC,CAAO,CACpE,CAEA,MAAM,OAAOD,EAAaC,EAAmC,CAAC,EAAe,CAC3E,GAAI,CAACD,EAAU,MAAM,IAAI,MAAM,sBAAsB,EACrD,OAAO,KAAK,QAAQ,KAClB,KAAK,aAAa,EAClBA,EACA,OAAO,OAAO,CAAC,EAAGC,EAAS,CAAE,OAAQ,QAAS,CAAC,CACjD,CACF,CAOA,MAAM,OACJD,EACAC,EAA8D,CAAC,EAC1B,CACrC,GAAI,CAACD,EAAU,MAAM,IAAI,MAAM,sBAAsB,EAErD,OAAIC,EAAQ,WAAgB,KACnB,KAAK,QAAQ,MAClB,KAAK,aAAa,EAClBD,EACA,OAAO,OAAO,CAAC,EAAGC,CAAO,CAC3B,EAEO,KAAK,QAAQ,KAClB,KAAK,aAAa,EAClBD,EACA,OAAO,OAAO,CAAC,EAAGC,EAAS,CAAE,OAAQ,QAAS,CAAC,CACjD,CAEJ,CAEA,MAAM,OACJC,EAAqB,CAAC,EACG,CACzB,OAAO,KAAK,QAAQ,OAAuB,KAAK,aAAa,EAAGA,CAAK,CACvE,CAEA,MAAM,WAAWC,EAAgBF,EAAoC,CAAC,EAAG,CACvE,YAAK,cAAc,OAAO,KACxB,iKACF,EACO,KAAK,OAAOE,EAAWF,CAAO,CACvC,CAgBA,MAAM,OACJE,EACAF,EAAoC,CAAC,EACD,CACpC,IAAIG,EACJ,GAAI,MAAM,QAAQD,CAAS,EACzB,GAAI,CACFC,EAAyBD,EACtB,IAAKH,GAAa,KAAK,UAAUA,CAAQ,CAAC,EAC1C,KAAK;AAAA,CAAI,CACd,OAASK,EAAY,CAEnB,MACEA,aAAiB,YACjBA,EAAM,QAAQ,SAAS,kCAAkC,EAEnD,IAAI,MAAM,GAAGA,CAAK;AAAA;AAAA;AAAA;AAAA,WAIvB,EAIG,IAAI,MAAMA,CAAK,CACvB,MAEAD,EAAyBD,EAG3B,IAAMG,EAAuB,MAAM,KAAK,QAAQ,eAC9C,OACA,KAAK,aAAa,QAAQ,EAC1B,CACE,gBAAiBL,EACjB,eAAgBG,EAChB,kBAAmB,CAAE,eAAgB,YAAa,EAClD,sBAAuB,GACvB,gBAAiB,EAAAV,EACnB,CACF,EAEA,GAAI,MAAM,QAAQS,CAAS,EAAG,CAC5B,IAAMI,EAAsBD,EACzB,MAAM;AAAA,CAAI,EACV,IAAKE,GAAM,KAAK,MAAMA,CAAC,CAAC,EACrBC,EAAcF,EAAoB,OACrCC,GAAMA,EAAE,UAAY,EACvB,EACA,GAAIC,EAAY,OAAS,EACvB,MAAM,IAAIC,EACR,GACEH,EAAoB,OAASE,EAAY,MAC3C,qCACEA,EAAY,MACd,2IACAF,EACA,CACE,uBAAAH,EACA,QAAAH,EACA,YAAAQ,EACA,aAAcF,EAAoB,OAASE,EAAY,MACzD,CACF,EAEA,OAAOF,CAEX,KACE,QAAOD,CAEX,CAIA,MAAM,aACJK,EACAV,EAAoC,CAAC,EACV,CAa3B,IAAMM,GAZuB,MAAM,KAAK,QAAQ,eAC9C,OACA,KAAK,aAAa,QAAQ,EAC1B,CACE,gBAAiBN,EACjB,eAAgBU,EAChB,kBAAmB,CAAE,eAAgB,YAAa,EAClD,sBAAuB,GACvB,gBAAiB,EAAAjB,EACnB,CACF,GAGG,MAAM;AAAA,CAAI,EACV,IAAKc,GAAM,KAAK,MAAMA,CAAC,CAAC,EACrBC,EAAcF,EAAoB,OAAQC,GAAMA,EAAE,UAAY,EAAK,EACzE,GAAIC,EAAY,OAAS,EACvB,MAAM,IAAIC,EACR,GACEH,EAAoB,OAASE,EAAY,MAC3C,qCACEA,EAAY,MACd,2IACAF,EACA,CACE,uBAAwBI,EACxB,QAAAV,EACA,YAAAQ,EACA,aAAcF,EAAoB,OAASE,EAAY,MACzD,CACF,EAEA,OAAOF,CAEX,CAKA,MAAM,OAAON,EAAqC,CAAC,EAAoB,CACrE,OAAO,KAAK,QAAQ,IAAY,KAAK,aAAa,QAAQ,EAAGA,CAAO,CACtE,CAKA,MAAM,aACJA,EAAqC,CAAC,EACjB,CACrB,OAAO,KAAK,QAAQ,IAAgB,KAAK,aAAa,QAAQ,EAAGA,EAAS,CACxE,aAAc,QAChB,CAAC,CACH,CACF,EC5fA,SAASW,GACPC,EAC+B,CAC/B,OAAO,OAAO,KAAKC,EAAe,EAC/B,OAAQC,GAAQF,EAAOE,CAAG,IAAM,MAAS,EACzC,MAAOA,GAAQC,GAAgBH,EAAOE,CAAG,CAAC,CAAC,CAChD,CAEO,SAASE,EACdJ,EAC+B,CAC/B,IAAMK,EAAS,CAAE,GAAGL,CAAO,EAS3B,GAAI,CAPsB,OAAO,KAAKC,EAAe,EAClD,OAAQC,GAAQ,MAAM,QAAQG,EAAOH,CAAG,CAAC,CAAC,EAC1C,IAAKA,IACJG,EAAOH,CAAG,EAAIG,EAAOH,CAAG,EAAE,KAAK,GAAG,EAC3BA,EACR,EAEoB,QAAUH,GAAiBM,CAAM,EACtD,OAAOA,EAGT,GAAI,CAACN,GAAiBM,CAAM,EAC1B,MAAM,IAAI,MACR,yCAAyC,KAAK,UAAUA,CAAM,CAAC,EACjE,EAGF,OAAOA,CACT,CAEA,SAASF,GACPG,EACiC,CACjC,MAAO,CAAC,MAAM,QAAQA,CAAK,CAC7B,CCjCA,IAAMC,GAAe,gBAuBAC,EAArB,KAAiC,CAG/B,YACUC,EACAC,EACAC,EAA8B,GACtC,CAHQ,aAAAF,EACA,mBAAAC,EACA,wBAAAC,EAER,KAAK,iBAAmB,IAAIC,CAC9B,CAEA,YAAa,CACX,KAAK,iBAAiB,WAAW,CACnC,CAEA,MAAM,QACJC,EACAC,EAAkD,CAAC,EACnD,CACE,6BAAAC,EAA+B,KAAK,cACjC,4BACL,EAA+C,CAAC,EACf,CACjC,IAAMC,EAAoB,CAAC,EACvB,KAAK,qBACPA,EAAkB,cAAc,EAAI,cAGtC,IAAMC,EAAwB,CAAC,EAC3B,KAAK,cAAc,2BAA6B,KAClDA,EAAsB,UAAe,IAGvC,IAAMC,EAAc,CAAE,GAAGJ,EAAc,GAAGG,CAAsB,EAE1DE,EAA2B,CAC/B,SAAUN,EAAe,SAAS,IAAIO,CAAwB,CAChE,EAEMC,EAAwBD,EAAyBF,CAAW,EAElE,OAAO,KAAK,iBAAiB,QAC3B,KAAK,QACL,KAAK,QAAQ,KACb,CACEX,GACAY,EACAE,EACAL,CACF,EACA,CAAE,wBAAyBD,CAA6B,CAC1D,CACF,CACF,ECnFO,IAAMO,GAAN,KAA8D,CAGnE,YACmBC,EACAC,EACAC,EACjB,CAHiB,UAAAF,EACA,aAAAC,EACA,mBAAAC,EAEjB,KAAK,WAAa,IAAIC,EACpB,KAAK,KACL,KAAK,QACL,KAAK,aACP,CACF,CAEA,WAAoC,CAClC,OAAO,KAAK,UACd,CACF,EChBA,IAAqBC,GAArB,KAAkC,CAMhC,YAAYC,EAA+B,CACzCA,EAAQ,uBAAyBA,EAAQ,wBAA0B,GAEjEA,EAAQ,yBAA2B,KAClCA,EAAQ,QAAU,IAAI,OAAS,MAEhC,QAAQ,KACN,mIACF,EACAA,EAAQ,uBAAyB,IAGnC,KAAK,cAAgB,IAAIC,EAAcD,CAAO,EAC9C,KAAK,QAAU,IAAIE,EAAQ,KAAK,aAAa,EAC7C,KAAK,YAAc,IAAIC,EAAY,KAAK,QAAS,KAAK,cAAe,EAAI,EACzE,KAAK,sBAAwB,CAAC,CAChC,CAEA,YAAa,CACX,KAAK,YAAY,WAAW,EAG5B,OAAO,QAAQ,KAAK,qBAAqB,EAAE,QAAQ,CAAC,CAACC,EAAGC,CAAU,IAAM,CACtEA,EAAW,UAAU,EAAE,WAAW,CACpC,CAAC,CACH,CAEA,YACEC,EAC8D,CAC9D,GAAKA,EAMH,OAAI,KAAK,sBAAsBA,CAAc,IAAM,SACjD,KAAK,sBAAsBA,CAAc,EAAI,IAAIC,GAC/CD,EACA,KAAK,QACL,KAAK,aACP,GAEK,KAAK,sBAAsBA,CAAc,EAZhD,MAAM,IAAI,MACR,8LAEF,CAWJ,CACF,ECtDA,IAAME,GAAe,aAuCAC,EAArB,MAAqBC,CAAU,CAC7B,YACUC,EACAC,EACR,CAFQ,oBAAAD,EACA,aAAAC,CACP,CAEH,MAAM,OACJC,EACAC,EACyB,CACzB,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAU,EAC5BC,CACF,CACF,CAEA,MAAM,UAA6C,CACjD,OAAO,KAAK,QAAQ,IAA6B,KAAK,aAAa,CAAC,CACtE,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGC,EAAY,YAAY,IAAI,KAAK,cAAc,GACvDN,EAAU,YACZ,GAAGK,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CAAC,EACvE,CAEA,WAAW,cAAuB,CAChC,OAAOP,EACT,CACF,EC5DA,IAAqBS,EAArB,KAA8B,CAC5B,YACUC,EACAC,EACAC,EACR,CAHQ,oBAAAF,EACA,gBAAAC,EACA,aAAAC,CACP,CAEH,MAAM,UAAoC,CACxC,OAAO,KAAK,QAAQ,IAAoB,KAAK,aAAa,CAAC,CAC7D,CAEA,MAAM,QAAwC,CAC5C,OAAO,KAAK,QAAQ,OAA6B,KAAK,aAAa,CAAC,CACtE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAY,YAAY,IAAI,mBAAmB,KAAK,cAAc,CAAC,GAAGC,EAAU,YAAY,IAAI,mBAAmB,KAAK,UAAU,CAAC,EAC/I,CACF,EC1BA,IAAMC,GAAe,YAaAC,EAArB,MAAqBC,CAAS,CAC5B,YAAoBC,EAAgCC,EAAkB,CAAlD,oBAAAD,EAAgC,aAAAC,CAAmB,CAEvE,MAAM,OACJC,EACAC,EACwB,CACxB,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAS,EAC3BC,CACF,CACF,CAEA,MAAM,UAA4C,CAChD,OAAO,KAAK,QAAQ,IAA4B,KAAK,aAAa,CAAC,CACrE,CAEQ,aAAaC,EAAoB,CACvC,MAAO,GAAGC,EAAY,YAAY,IAAI,mBAAmB,KAAK,cAAc,CAAC,GAC3EN,EAAS,YACX,GAAGK,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CAAC,EACvE,CAEA,WAAW,cAAuB,CAChC,OAAOP,EACT,CACF,EC/BA,IAAqBS,EAArB,KAA6B,CAC3B,YACUC,EACAC,EACAC,EACR,CAHQ,oBAAAF,EACA,eAAAC,EACA,aAAAC,CACP,CAEH,MAAM,UAAmC,CACvC,OAAO,KAAK,QAAQ,IAAmB,KAAK,aAAa,CAAC,CAC5D,CAEA,MAAM,QAAuC,CAC3C,OAAO,KAAK,QAAQ,OAA4B,KAAK,aAAa,CAAC,CACrE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAY,YAAY,IAAI,mBAAmB,KAAK,cAAc,CAAC,GAAGC,EAAS,YAAY,IAAI,mBAAmB,KAAK,SAAS,CAAC,EAC7I,CACF,ECtBO,IAAMC,GAAN,KAAkD,CACvD,YACUC,EACAC,EACAC,EACR,CAHQ,oBAAAF,EACA,gBAAAC,EACA,aAAAC,CACP,CAEH,MAAM,UAAuB,CAC3B,OAAO,KAAK,QAAQ,IAAO,KAAK,aAAa,CAAC,CAChD,CAEA,MAAM,OAAOC,EAAmC,CAC9C,OAAO,KAAK,QAAQ,OAAU,KAAK,aAAa,EAAGA,CAAO,CAC5D,CAEA,MAAM,OACJC,EACAD,EAAmC,CAAC,EACxB,CACZ,OAAO,KAAK,QAAQ,MAAS,KAAK,aAAa,EAAGC,EAAiBD,CAAO,CAC5E,CAEQ,cAAuB,CAC7B,MAAO,GAAGE,EAAY,YAAY,IAAI,mBAAmB,KAAK,cAAc,CAAC,GAAGC,EAAU,YAAY,IAAI,mBAAmB,KAAK,UAAU,CAAC,EAC/I,CACF,ECgCA,IAAqBC,EAArB,KAAmE,CAQjE,YACmBC,EACAC,EACAC,EACjB,CAHiB,UAAAF,EACA,aAAAC,EACA,mBAAAC,EATnB,KAAQ,oBAAmD,CAAC,EAE5D,KAAQ,oBAAgD,CAAC,EAEzD,KAAQ,mBAA8C,CAAC,EAOrD,KAAK,KAAOF,EACZ,KAAK,QAAUC,EACf,KAAK,cAAgBC,EAErB,KAAK,WAAa,IAAIC,EACpB,KAAK,KACL,KAAK,QACL,KAAK,aACP,EACA,KAAK,WAAa,IAAIC,EAAU,KAAK,KAAM,KAAK,OAAO,EACvD,KAAK,UAAY,IAAIC,EAAS,KAAK,KAAM,KAAK,OAAO,CACvD,CAEA,MAAM,UAAsC,CAC1C,OAAO,KAAK,QAAQ,IAAsB,KAAK,aAAa,CAAC,CAC/D,CAEA,MAAM,OAAOC,EAA2D,CACtE,OAAO,KAAK,QAAQ,MAAwB,KAAK,aAAa,EAAGA,CAAM,CACzE,CAEA,MAAM,OACJC,EAAmC,CAAC,EACT,CAC3B,OAAO,KAAK,QAAQ,OAAyB,KAAK,aAAa,EAAGA,CAAO,CAC3E,CAEA,MAAM,QAA2B,CAC/B,GAAI,CACF,aAAM,KAAK,SAAS,EACb,EACT,OAAS,EAAG,CACV,GAAI,aAAaC,EAAgB,MAAO,GACxC,MAAM,CACR,CACF,CAIA,UAAUC,EAAiD,CACzD,OAAKA,GAGC,KAAK,oBAAoBA,CAAU,IAAM,SAC3C,KAAK,oBAAoBA,CAAU,EAAI,IAAIC,GACzC,KAAK,KACLD,EACA,KAAK,OACP,GAEK,KAAK,oBAAoBA,CAAU,GATnC,KAAK,UAWhB,CAIA,UAAUE,EAA2C,CACnD,OAAIA,IAAe,OACV,KAAK,YAER,KAAK,oBAAoBA,CAAU,IAAM,SAC3C,KAAK,oBAAoBA,CAAU,EAAI,IAAIC,EACzC,KAAK,KACLD,EACA,KAAK,OACP,GAEK,KAAK,oBAAoBA,CAAU,EAE9C,CAIA,SAASE,EAAwC,CAC/C,OAAIA,IAAc,OACT,KAAK,WAER,KAAK,mBAAmBA,CAAS,IAAM,SACzC,KAAK,mBAAmBA,CAAS,EAAI,IAAIC,EACvC,KAAK,KACLD,EACA,KAAK,OACP,GAEK,KAAK,mBAAmBA,CAAS,EAE5C,CAEQ,cAAuB,CAC7B,MAAO,GAAGE,EAAY,YAAY,IAAI,mBAAmB,KAAK,IAAI,CAAC,EACrE,CACF,ECvKA,IAAMC,GAAe,WAcAC,EAArB,MAAqBC,CAAQ,CAC3B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,OACJC,EACAC,EACgC,CAChC,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAI,EACtBC,CACF,CACF,CAEA,MAAM,UAAqD,CACzD,OAAO,KAAK,QAAQ,IAAqCL,EAAY,CACvE,CAEQ,aAAaM,EAAmB,CACtC,MAAO,GAAGJ,EAAQ,YAAY,IAAI,mBAAmBI,CAAS,CAAC,EACjE,CAEA,WAAW,cAAuB,CAChC,OAAON,EACT,CACF,ECrCA,IAAqBO,EAArB,KAA2B,CACzB,YAAoBC,EAAsBC,EAAkB,CAAxC,UAAAD,EAAsB,aAAAC,CAAmB,CAE7D,MAAM,UAA2C,CAC/C,OAAO,KAAK,QAAQ,IAA2B,KAAK,aAAa,CAAC,CACpE,CAEA,MAAM,QAAyC,CAC7C,OAAO,KAAK,QAAQ,OAA8B,KAAK,aAAa,CAAC,CACvE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAQ,YAAY,IAAI,mBAAmB,KAAK,IAAI,CAAC,EACjE,CACF,ECjBA,IAAAC,GAA2B,SAM3B,IAAMC,GAAe,QAYAC,EAArB,MAAqBC,CAAK,CACxB,YAAoBC,EAAkB,CAAlB,aAAAA,EAClB,KAAK,QAAUA,CACjB,CAEA,MAAM,OAAOC,EAA6C,CACxD,OAAO,KAAK,QAAQ,KAAgBF,EAAK,aAAcE,CAAM,CAC/D,CAEA,MAAM,UAAwC,CAC5C,OAAO,KAAK,QAAQ,IAAwBJ,EAAY,CAC1D,CAEA,wBACEK,EACAC,EACQ,CAGR,IAAMC,EAAmBC,EAAyBF,CAAU,EACtDG,EAAa,KAAK,UAAUF,CAAgB,EAC5CG,EAAS,OAAO,QACpB,eAAW,SAAUL,CAAS,EAAE,OAAOI,CAAU,EAAE,OAAO,QAAQ,CACpE,EACME,EAAYN,EAAU,OAAO,EAAG,CAAC,EACjCO,EAAe,GAAGF,CAAM,GAAGC,CAAS,GAAGF,CAAU,GAEvD,OAAO,OAAO,KAAKG,CAAY,EAAE,SAAS,QAAQ,CACpD,CAEA,WAAW,cAAe,CACxB,OAAOZ,EACT,CACF,EC9BA,IAAqBa,EAArB,KAAyB,CACvB,YACUC,EACAC,EACR,CAFQ,QAAAD,EACA,aAAAC,CACP,CAEH,MAAM,UAA+B,CACnC,OAAO,KAAK,QAAQ,IAAe,KAAK,aAAa,CAAC,CACxD,CAEA,MAAM,QAAmC,CACvC,OAAO,KAAK,QAAQ,OAAwB,KAAK,aAAa,CAAC,CACjE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAK,YAAY,IAAI,mBAAmB,KAAK,EAAE,CAAC,EAC5D,CACF,ECpCA,IAAMC,GAAe,SAOAC,EAArB,KAA2B,CACzB,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,UAAyC,CAC7C,OAAO,KAAK,QAAQ,IAAyBF,EAAY,CAC3D,CACF,ECbA,IAAMG,GAAe,gBAsBAC,EAArB,KAA6B,CAC3B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,UAAqC,CACzC,OAAO,KAAK,QAAQ,IAAIF,EAAY,CACtC,CACF,EC5BA,IAAMG,GAAe,cAsBAC,GAArB,KAA6B,CAC3B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,UAAmC,CACvC,OAAO,KAAK,QAAQ,IAAIF,EAAY,CACtC,CACF,EC5BA,IAAMG,GAAe,UAMAC,GAArB,KAA4B,CAC1B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,UAAoC,CACxC,OAAO,KAAK,QAAQ,IAAoBF,EAAY,CACtD,CACF,ECZA,IAAMG,GAAe,cAEAC,GAArB,KAAgC,CAC9B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,QAEJC,EACAC,EAAuC,CAAC,EAC1B,CACd,OAAO,KAAK,QAAQ,KAClB,GAAGJ,EAAY,IAAIG,CAAa,GAChC,CAAC,EACDC,CACF,CACF,CACF,ECZA,IAAMC,GAAe,WAUAC,EAArB,MAAqBC,CAAQ,CAC3B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,OACJC,EACAC,EACuB,CACvB,GAAI,OAAOA,EAAO,OAAU,UAAY,aAAcA,EAAO,MAAO,CAClE,IAAMC,EAAmBD,EAAO,MAAM,SAAS,IAAKE,GAClDC,EAAyBD,CAAM,CACjC,EAEA,OAAO,KAAK,QAAQ,IAAkB,KAAK,aAAaH,CAAQ,EAAG,CACjE,MAAO,CAAE,SAAUE,CAAiB,CACtC,CAAC,CACH,CACA,IAAMA,EAAmBE,EAAyBH,EAAO,KAAK,EAE9D,OAAO,KAAK,QAAQ,IAAkB,KAAK,aAAaD,CAAQ,EAAG,CACjE,MAAOE,CACT,CAAC,CACH,CAEA,MAAM,UAA2C,CAC/C,OAAO,KAAK,QAAQ,IAA2B,KAAK,aAAa,CAAC,CACpE,CAEQ,aAAaG,EAA4B,CAC/C,MAAO,GAAGP,EAAQ,YAAY,GAC5BO,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CACnE,EACF,CAEA,WAAW,cAAuB,CAChC,OAAOT,EACT,CACF,ECzCA,IAAqBU,GAArB,KAA4B,CAC1B,YAAoBC,EAA0BC,EAAkB,CAA5C,cAAAD,EAA0B,aAAAC,CAAmB,CAEjE,MAAM,UAAkC,CACtC,OAAO,KAAK,QAAQ,IAAkB,KAAK,aAAa,CAAC,CAC3D,CAEA,MAAM,QAAsC,CAC1C,OAAO,KAAK,QAAQ,OAA2B,KAAK,aAAa,CAAC,CACpE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAQ,YAAY,IAAI,mBAAmB,KAAK,QAAQ,CAAC,EACrE,CACF,ECfA,IAAMC,GAAe,mBAEAC,EAArB,MAAqBC,CAAe,CAClC,YAA6BC,EAAkB,CAAlB,aAAAA,EAC3B,KAAK,QAAUA,CACjB,CAEA,MAAM,OACJC,EACAC,EACoC,CACpC,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAI,EACtBC,CACF,CACF,CAEA,MAAM,UAAkD,CACtD,OAAO,KAAK,QAAQ,IAAkC,KAAK,aAAa,CAAC,CAC3E,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGJ,EAAe,YAAY,GACnCI,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CACnE,EACF,CAEA,WAAW,cAAe,CACxB,OAAON,EACT,CACF,ECRA,IAAqBO,GAArB,KAAmC,CACjC,YACUC,EACAC,EACR,CAFQ,UAAAD,EACA,aAAAC,CACP,CAEH,MAAM,UAAyC,CAC7C,OAAO,KAAK,QAAQ,IAAyB,KAAK,aAAa,CAAC,CAClE,CAEA,MAAM,QAA6C,CACjD,OAAO,KAAK,QAAQ,OAAkC,KAAK,aAAa,CAAC,CAC3E,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAe,YAAY,IAAI,mBAAmB,KAAK,IAAI,CAAC,EACxE,CACF,EC9CA,IAAMC,GAAe,oBAEAC,GAArB,MAAqBC,CAAgB,CACnC,YAA6BC,EAAkB,CAAlB,aAAAA,EAC3B,KAAK,QAAUA,CACjB,CAEA,MAAM,OACJC,EACqC,CACrC,OAAO,KAAK,QAAQ,KAClB,KAAK,aAAa,EAClBA,CACF,CACF,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGH,EAAgB,YAAY,GACpCG,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CACnE,EACF,CAEA,WAAW,cAAe,CACxB,OAAOL,EACT,CACF,ECvBA,IAAMM,GAAe,aAEAC,GAArB,KAA+B,CAK7B,YAA6BC,EAAkB,CAAlB,aAAAA,EAH7B,KAAiB,yBAA0D,CAAC,EAI1E,KAAK,QAAUA,EACf,KAAK,gBAAkB,IAAIC,EAAe,KAAK,OAAO,EACtD,KAAK,iBAAmB,IAAIC,GAAgB,KAAK,OAAO,CAC1D,CAIA,MAAMC,EAA6C,CACjD,OAAIA,IAAO,OACF,KAAK,iBAER,KAAK,yBAAyBA,CAAE,IAAM,SACxC,KAAK,yBAAyBA,CAAE,EAAI,IAAIC,GAAcD,EAAI,KAAK,OAAO,GAEjE,KAAK,yBAAyBA,CAAE,EAE3C,CAEA,QAA0B,CACxB,OAAO,KAAK,gBACd,CAEA,WAAW,cAAe,CACxB,OAAOL,EACT,CACF,ECnCA,IAAMO,GAAe,aAWAC,EAArB,MAAqBC,CAAU,CAC7B,YAAoBC,EAAkB,CAAlB,aAAAA,CAAmB,CAEvC,MAAM,OACJC,EACAC,EACyB,CACzB,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAaD,CAAU,EAC5BC,CACF,CACF,CAEA,MAAM,UAA6C,CACjD,OAAO,KAAK,QAAQ,IAA6B,KAAK,aAAa,CAAC,CACtE,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGJ,EAAU,YAAY,GAC9BI,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CACnE,EACF,CAEA,WAAW,cAAuB,CAChC,OAAON,EACT,CACF,EC3BA,IAAqBO,GAArB,KAA8B,CAC5B,YACUC,EACAC,EACR,CAFQ,gBAAAD,EACA,aAAAC,CACP,CAEH,MAAM,UAAoC,CACxC,OAAO,KAAK,QAAQ,IAAoB,KAAK,aAAa,CAAC,CAC7D,CAEA,MAAM,QAAwC,CAC5C,OAAO,KAAK,QAAQ,OAA6B,KAAK,aAAa,CAAC,CACtE,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAU,YAAY,IAAI,mBAAmB,KAAK,UAAU,CAAC,EACzE,CACF,ECxBA,IAAMC,GAAe,wBAEAC,EAArB,MAAqBC,CAAmB,CACtC,YAA6BC,EAAkB,CAAlB,aAAAA,EAC3B,KAAK,QAAUA,CACjB,CAEA,MAAM,OACJC,EACwC,CACxC,OAAO,KAAK,QAAQ,KAClB,KAAK,aAAa,EAClBA,CACF,CACF,CAEA,MAAM,UAA+C,CACnD,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAa,CACpB,CACF,CAEQ,aAAaC,EAA4B,CAC/C,MAAO,GAAGH,EAAmB,YAAY,GACvCG,IAAc,OAAY,GAAK,IAAM,mBAAmBA,CAAS,CACnE,EACF,CAEA,WAAW,cAAe,CACxB,OAAOL,EACT,CACF,ECjBA,IAAqBM,GAArB,KAAuC,CACrC,YACUC,EACAC,EACR,CAFQ,QAAAD,EACA,aAAAC,CACP,CAEH,MAAM,OACJC,EACwC,CACxC,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAa,EAClBA,CACF,CACF,CAEA,MAAM,UAA6C,CACjD,OAAO,KAAK,QAAQ,IAA6B,KAAK,aAAa,CAAC,CACtE,CAEA,MAAM,QAAiD,CACrD,OAAO,KAAK,QAAQ,OAClB,KAAK,aAAa,CACpB,CACF,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAmB,YAAY,IAAI,mBAAmB,KAAK,EAAE,CAAC,EAC1E,CACF,EC3CA,IAAMC,GAAe,iBAMAC,EAArB,KAAmC,CAOjC,YAA6BC,EAAkB,CAAlB,aAAAA,EAL7B,KAAiB,6BAGb,CAAC,EAGH,KAAK,QAAUA,EACf,KAAK,qBAAuB,IAAIC,EAAmB,KAAK,OAAO,CACjE,CAEA,MAAM,UAAiD,CACrD,OAAO,KAAK,QAAQ,IAAiCH,EAAY,CACnE,CAIA,OAAOI,EAAqD,CAC1D,OAAIA,IAAO,OACF,KAAK,sBAER,KAAK,6BAA6BA,CAAE,IAAM,SAC5C,KAAK,6BAA6BA,CAAE,EAAI,IAAIC,GAC1CD,EACA,KAAK,OACP,GAEK,KAAK,6BAA6BA,CAAE,EAE/C,CAEA,WAAW,cAAe,CACxB,OAAOJ,EACT,CACF,EC5BA,IAAqBM,GAArB,KAAkC,CAChC,YACUC,EACAC,EACR,CAFQ,QAAAD,EACA,aAAAC,CACP,CAEH,MAAM,UAA0C,CAC9C,OAAO,KAAK,QAAQ,IAA0B,KAAK,aAAa,CAAC,CACnE,CAEA,MAAM,OACJC,EACmC,CACnC,OAAO,KAAK,QAAQ,IAClB,KAAK,aAAa,EAClBA,CACF,CACF,CAEA,MAAM,QAA4C,CAChD,OAAO,KAAK,QAAQ,OAAiC,KAAK,aAAa,CAAC,CAC1E,CAEQ,cAAuB,CAC7B,MAAO,GAAGC,EAAc,YAAY,IAAI,mBAAmB,KAAK,EAAE,CAAC,EACrE,CACF,ECpBA,IAAqBC,GAArB,KAA4B,CAuB1B,YAAYC,EAA+B,CACzCA,EAAQ,uBAAyBA,EAAQ,wBAA0B,GAEnE,KAAK,cAAgB,IAAIC,EAAcD,CAAO,EAC9C,KAAK,QAAU,IAAIE,EAAQ,KAAK,aAAa,EAC7C,KAAK,MAAQ,IAAIC,EAAM,KAAK,OAAO,EACnC,KAAK,QAAU,IAAIC,EAAQ,KAAK,OAAO,EACvC,KAAK,MAAQ,IAAIA,GAAM,KAAK,OAAO,EACnC,KAAK,OAAS,IAAIC,GAAO,KAAK,OAAO,EACrC,KAAK,WAAa,IAAIC,GAAW,KAAK,OAAO,EAC7C,KAAK,YAAc,IAAIC,EAAY,KAAK,QAAS,KAAK,aAAa,EACnE,KAAK,aAAe,IAAIC,EAAY,KAAK,OAAO,EAChD,KAAK,sBAAwB,CAAC,EAC9B,KAAK,SAAW,IAAIC,EAAQ,KAAK,OAAO,EACxC,KAAK,kBAAoB,CAAC,EAC1B,KAAK,MAAQ,IAAIC,EAAK,KAAK,OAAO,EAClC,KAAK,eAAiB,CAAC,EACvB,KAAK,SAAW,IAAIC,EAAQ,KAAK,OAAO,EACxC,KAAK,kBAAoB,CAAC,EAC1B,KAAK,WAAa,IAAIC,EAAU,KAAK,OAAO,EAC5C,KAAK,oBAAsB,CAAC,EAC5B,KAAK,UAAY,IAAIC,GAAU,KAAK,OAAO,EAC3C,KAAK,eAAiB,IAAIC,EAAc,KAAK,OAAO,EACpD,KAAK,wBAA0B,CAAC,CAClC,CAMA,YAAYC,EAAmD,CAC7D,OAAIA,IAAmB,OACd,KAAK,cAER,KAAK,sBAAsBA,CAAc,IAAM,SACjD,KAAK,sBAAsBA,CAAc,EAAI,IAAIC,EAC/CD,EACA,KAAK,QACL,KAAK,aACP,GAEK,KAAK,sBAAsBA,CAAc,EAEpD,CAIA,QAAQE,EAAqC,CAC3C,OAAIA,IAAc,OACT,KAAK,UAER,KAAK,kBAAkBA,CAAS,IAAM,SACxC,KAAK,kBAAkBA,CAAS,EAAI,IAAIC,EAAMD,EAAW,KAAK,OAAO,GAEhE,KAAK,kBAAkBA,CAAS,EAE3C,CAIA,KAAKE,EAAyB,CAC5B,OAAIA,IAAO,OACF,KAAK,OAER,KAAK,eAAeA,CAAE,IAAM,SAC9B,KAAK,eAAeA,CAAE,EAAI,IAAIC,EAAID,EAAI,KAAK,OAAO,GAE7C,KAAK,eAAeA,CAAE,EAEjC,CAIA,QAAQA,EAA+B,CACrC,OAAIA,IAAO,OACF,KAAK,UAER,KAAK,kBAAkBA,CAAE,IAAM,SACjC,KAAK,kBAAkBA,CAAE,EAAI,IAAIE,GAAOF,EAAI,KAAK,OAAO,GAEnD,KAAK,kBAAkBA,CAAE,EAEpC,CAIA,UAAUA,EAAmC,CAC3C,OAAIA,IAAO,OACF,KAAK,YAER,KAAK,oBAAoBA,CAAE,IAAM,SACnC,KAAK,oBAAoBA,CAAE,EAAI,IAAIG,GAASH,EAAI,KAAK,OAAO,GAEvD,KAAK,oBAAoBA,CAAE,EAEtC,CAIA,cAAcA,EAA2C,CACvD,OAAIA,IAAO,OACF,KAAK,gBAER,KAAK,wBAAwBA,CAAE,IAAM,SACvC,KAAK,wBAAwBA,CAAE,EAAI,IAAII,GAAaJ,EAAI,KAAK,OAAO,GAE/D,KAAK,wBAAwBA,CAAE,EAE1C,CACF","names":["require_http","__commonJSMin","exports","module","require_https","__commonJSMin","exports","module","require_crypto","__commonJSMin","exports","module","logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","httpBody","httpStatus","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","payload","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","import_http","import_https","axios","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","HTTPAgent","HTTPSAgent","source","response","error","candidateNode","isDueForHealthcheck","i","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","httpBody","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","Collections","apiCall","schema","options","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","normalizedParams","normalizeArrayableParams","queryParams","operation","Collections","arrayableParams","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","hasNoArrayValues","params","arrayableParams","key","isNonArrayValue","normalizeArrayableParams","result","value","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","normalizedSearchRequests","normalizeArrayableParams","normalizedQueryParams","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","options","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","import_crypto","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","normalizedParams","normalizeArrayableParams","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","normalizedParams","search","normalizeArrayableParams","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation"]} \ No newline at end of file diff --git a/dist/Typesense.d.mts b/dist/typesense.d.mts similarity index 95% rename from dist/Typesense.d.mts rename to dist/typesense.d.mts index 9814771e..0fd0f39a 100644 --- a/dist/Typesense.d.mts +++ b/dist/typesense.d.mts @@ -192,11 +192,14 @@ declare class SearchOnlyDocuments implements Searchabl static get RESOURCEPATH(): string; } -interface DeleteQuery { +type DeleteQuery = { + truncate?: true; +} | { + truncate?: never; filter_by?: string; batch_size?: number; ignore_not_found?: boolean; -} +}; interface DeleteResponse { num_deleted: number; } @@ -233,6 +236,7 @@ interface SearchParams { query_by_weights?: string | number[]; prefix?: string | boolean | boolean[]; filter_by?: string; + max_filter_by_candidates?: number; enable_synonyms?: boolean; enable_analytics?: boolean; filter_curated_hits?: boolean; @@ -446,6 +450,7 @@ declare class Documents extends SearchOnlyDoc interface MultiSearchRequestSchema extends SearchParams { collection?: string; + rerank_hybrid_matches?: boolean; "x-typesense-api-key"?: string; } interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { @@ -453,6 +458,7 @@ interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { "x-typesense-api-key"?: string; } interface MultiSearchRequestsSchema { + union?: true; searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; } interface MultiSearchResponse { @@ -597,8 +603,8 @@ declare class Document { private endpointPath; } -type FieldType = "string" | "int32" | "int64" | "float" | "bool" | "geopoint" | "geopoint[]" | "string[]" | "int32[]" | "int64[]" | "float[]" | "bool[]" | "object" | "object[]" | "auto" | "string*" | "image"; -interface CollectionFieldSchema { +type FieldType = "string" | "int32" | "int64" | "float" | "bool" | "geopoint" | "geopolygon" | "geopoint[]" | "string[]" | "int32[]" | "int64[]" | "float[]" | "bool[]" | "object" | "object[]" | "auto" | "string*" | "image"; +interface CollectionFieldSchema extends Pick { name: string; type: FieldType; optional?: boolean; @@ -817,7 +823,7 @@ declare class Health { declare class Operations { private apiCall; constructor(apiCall: ApiCall); - perform(operationName: "vote" | "snapshot" | "cache/clear" | (string & {}), queryParameters?: Record): Promise; + perform(operationName: "vote" | "snapshot" | "cache/clear" | "schema_changes" | (string & {}), queryParameters?: Record): Promise; } interface PresetSchema extends PresetCreateSchema { @@ -1025,6 +1031,44 @@ declare class Conversations { static get RESOURCEPATH(): string; } +interface StemmingDictionaryCreateSchema { + root: string; + word: string; +} +interface StemmingDictionarySchema { + id: string; + words: StemmingDictionaryCreateSchema[]; +} +declare class StemmingDictionary { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + retrieve(): Promise; + private endpointPath; +} + +interface StemmingDictionariesRetrieveSchema { + dictionaries: string[]; +} +declare class StemmingDictionaries { + private readonly apiCall; + constructor(apiCall: ApiCall); + upsert(id: string, wordRootCombinations: StemmingDictionaryCreateSchema[] | string): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Stemming { + private readonly apiCall; + private readonly _stemmingDictionaries; + private readonly individualStemmingDictionaries; + constructor(apiCall: ApiCall); + dictionaries(): StemmingDictionaries; + dictionaries(id: string): StemmingDictionary; + static get RESOURCEPATH(): string; +} + declare class Client { configuration: Configuration; apiCall: ApiCall; @@ -1035,6 +1079,7 @@ declare class Client { operations: Operations; multiSearch: MultiSearch; analytics: Analytics; + stemming: Stemming; private readonly _collections; private readonly individualCollections; private readonly _aliases; diff --git a/dist/Typesense.d.ts b/dist/typesense.d.ts similarity index 95% rename from dist/Typesense.d.ts rename to dist/typesense.d.ts index 9814771e..0fd0f39a 100644 --- a/dist/Typesense.d.ts +++ b/dist/typesense.d.ts @@ -192,11 +192,14 @@ declare class SearchOnlyDocuments implements Searchabl static get RESOURCEPATH(): string; } -interface DeleteQuery { +type DeleteQuery = { + truncate?: true; +} | { + truncate?: never; filter_by?: string; batch_size?: number; ignore_not_found?: boolean; -} +}; interface DeleteResponse { num_deleted: number; } @@ -233,6 +236,7 @@ interface SearchParams { query_by_weights?: string | number[]; prefix?: string | boolean | boolean[]; filter_by?: string; + max_filter_by_candidates?: number; enable_synonyms?: boolean; enable_analytics?: boolean; filter_curated_hits?: boolean; @@ -446,6 +450,7 @@ declare class Documents extends SearchOnlyDoc interface MultiSearchRequestSchema extends SearchParams { collection?: string; + rerank_hybrid_matches?: boolean; "x-typesense-api-key"?: string; } interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { @@ -453,6 +458,7 @@ interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { "x-typesense-api-key"?: string; } interface MultiSearchRequestsSchema { + union?: true; searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; } interface MultiSearchResponse { @@ -597,8 +603,8 @@ declare class Document { private endpointPath; } -type FieldType = "string" | "int32" | "int64" | "float" | "bool" | "geopoint" | "geopoint[]" | "string[]" | "int32[]" | "int64[]" | "float[]" | "bool[]" | "object" | "object[]" | "auto" | "string*" | "image"; -interface CollectionFieldSchema { +type FieldType = "string" | "int32" | "int64" | "float" | "bool" | "geopoint" | "geopolygon" | "geopoint[]" | "string[]" | "int32[]" | "int64[]" | "float[]" | "bool[]" | "object" | "object[]" | "auto" | "string*" | "image"; +interface CollectionFieldSchema extends Pick { name: string; type: FieldType; optional?: boolean; @@ -817,7 +823,7 @@ declare class Health { declare class Operations { private apiCall; constructor(apiCall: ApiCall); - perform(operationName: "vote" | "snapshot" | "cache/clear" | (string & {}), queryParameters?: Record): Promise; + perform(operationName: "vote" | "snapshot" | "cache/clear" | "schema_changes" | (string & {}), queryParameters?: Record): Promise; } interface PresetSchema extends PresetCreateSchema { @@ -1025,6 +1031,44 @@ declare class Conversations { static get RESOURCEPATH(): string; } +interface StemmingDictionaryCreateSchema { + root: string; + word: string; +} +interface StemmingDictionarySchema { + id: string; + words: StemmingDictionaryCreateSchema[]; +} +declare class StemmingDictionary { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + retrieve(): Promise; + private endpointPath; +} + +interface StemmingDictionariesRetrieveSchema { + dictionaries: string[]; +} +declare class StemmingDictionaries { + private readonly apiCall; + constructor(apiCall: ApiCall); + upsert(id: string, wordRootCombinations: StemmingDictionaryCreateSchema[] | string): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} + +declare class Stemming { + private readonly apiCall; + private readonly _stemmingDictionaries; + private readonly individualStemmingDictionaries; + constructor(apiCall: ApiCall); + dictionaries(): StemmingDictionaries; + dictionaries(id: string): StemmingDictionary; + static get RESOURCEPATH(): string; +} + declare class Client { configuration: Configuration; apiCall: ApiCall; @@ -1035,6 +1079,7 @@ declare class Client { operations: Operations; multiSearch: MultiSearch; analytics: Analytics; + stemming: Stemming; private readonly _collections; private readonly individualCollections; private readonly _aliases; diff --git a/dist/typesense.js b/dist/typesense.js new file mode 100644 index 00000000..31978afb --- /dev/null +++ b/dist/typesense.js @@ -0,0 +1,1779 @@ +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// node-modules-polyfills-empty:http +var require_http = __commonJS({ + "node-modules-polyfills-empty:http"(exports, module) { + "use strict"; + module.exports = {}; + } +}); + +// node-modules-polyfills-empty:https +var require_https = __commonJS({ + "node-modules-polyfills-empty:https"(exports, module) { + "use strict"; + module.exports = {}; + } +}); + +// node-modules-polyfills-empty:crypto +var require_crypto = __commonJS({ + "node-modules-polyfills-empty:crypto"(exports, module) { + "use strict"; + module.exports = {}; + } +}); + +// src/Typesense/Configuration.ts +var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel); + +// src/Typesense/Errors/index.ts +var Errors_exports = {}; +__export(Errors_exports, { + HTTPError: () => HTTPError, + ImportError: () => ImportError, + MissingConfigurationError: () => MissingConfigurationError, + ObjectAlreadyExists: () => ObjectAlreadyExists, + ObjectNotFound: () => ObjectNotFound, + ObjectUnprocessable: () => ObjectUnprocessable, + RequestMalformed: () => RequestMalformed, + RequestUnauthorized: () => RequestUnauthorized, + ServerError: () => ServerError, + TypesenseError: () => TypesenseError +}); + +// src/Typesense/Errors/TypesenseError.ts +var TypesenseError = class extends Error { + // Source: https://stackoverflow.com/a/58417721/123545 + constructor(message, httpBody, httpStatus) { + super(message); + this.name = new.target.name; + this.httpBody = httpBody; + this.httpStatus = httpStatus; + Object.setPrototypeOf(this, new.target.prototype); + } +}; + +// src/Typesense/Errors/HTTPError.ts +var HTTPError = class extends TypesenseError { +}; + +// src/Typesense/Errors/MissingConfigurationError.ts +var MissingConfigurationError = class extends TypesenseError { +}; + +// src/Typesense/Errors/ObjectAlreadyExists.ts +var ObjectAlreadyExists = class extends TypesenseError { +}; + +// src/Typesense/Errors/ObjectNotFound.ts +var ObjectNotFound = class extends TypesenseError { +}; + +// src/Typesense/Errors/ObjectUnprocessable.ts +var ObjectUnprocessable = class extends TypesenseError { +}; + +// src/Typesense/Errors/RequestMalformed.ts +var RequestMalformed = class extends TypesenseError { +}; + +// src/Typesense/Errors/RequestUnauthorized.ts +var RequestUnauthorized = class extends TypesenseError { +}; + +// src/Typesense/Errors/ServerError.ts +var ServerError = class extends TypesenseError { +}; + +// src/Typesense/Errors/ImportError.ts +var ImportError = class extends TypesenseError { + constructor(message, importResults, payload) { + super(message); + this.importResults = importResults; + this.payload = payload; + } +}; + +// src/Typesense/Configuration.ts +var Configuration = class { + constructor(options) { + this.nodes = options.nodes || []; + this.nodes = this.nodes.map((node) => this.setDefaultPathInNode(node)).map((node) => this.setDefaultPortInNode(node)).map((node) => ({ ...node })); + if (options.randomizeNodes == null) { + options.randomizeNodes = true; + } + if (options.randomizeNodes === true) { + this.shuffleArray(this.nodes); + } + this.nearestNode = options.nearestNode; + this.nearestNode = this.setDefaultPathInNode(this.nearestNode); + this.nearestNode = this.setDefaultPortInNode(this.nearestNode); + this.connectionTimeoutSeconds = options.connectionTimeoutSeconds || options.timeoutSeconds || 5; + this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60; + this.numRetries = (options.numRetries !== void 0 && options.numRetries >= 0 ? options.numRetries : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; + this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1; + this.apiKey = options.apiKey; + this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; + this.cacheSearchResultsForSeconds = options.cacheSearchResultsForSeconds || 0; + this.useServerSideSearchCache = options.useServerSideSearchCache || false; + this.axiosAdapter = options.axiosAdapter; + this.logger = options.logger || _loglevel2.default; + this.logLevel = options.logLevel || "warn"; + this.logger.setLevel(this.logLevel); + this.additionalHeaders = options.additionalHeaders; + this.httpAgent = options.httpAgent; + this.httpsAgent = options.httpsAgent; + this.paramsSerializer = options.paramsSerializer; + this.showDeprecationWarnings(options); + this.validate(); + } + validate() { + if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) { + throw new MissingConfigurationError( + "Ensure that nodes[].protocol, nodes[].host and nodes[].port are set" + ); + } + if (this.nearestNode != null && this.isNodeMissingAnyParameters(this.nearestNode)) { + throw new MissingConfigurationError( + "Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set" + ); + } + if (this.apiKey == null) { + throw new MissingConfigurationError("Ensure that apiKey is set"); + } + return true; + } + validateNodes() { + return this.nodes.some((node) => { + return this.isNodeMissingAnyParameters(node); + }); + } + isNodeMissingAnyParameters(node) { + return !["protocol", "host", "port", "path"].every((key) => { + return node.hasOwnProperty(key); + }) && node["url"] == null; + } + setDefaultPathInNode(node) { + if (node != null && !node.hasOwnProperty("path")) { + node["path"] = ""; + } + return node; + } + setDefaultPortInNode(node) { + if (node != null && !node.hasOwnProperty("port") && node.hasOwnProperty("protocol")) { + switch (node["protocol"]) { + case "https": + node["port"] = 443; + break; + case "http": + node["port"] = 80; + break; + } + } + return node; + } + showDeprecationWarnings(options) { + if (options.timeoutSeconds) { + this.logger.warn( + "Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds" + ); + } + if (options.masterNode) { + this.logger.warn( + "Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12" + ); + } + if (options.readReplicaNodes) { + this.logger.warn( + "Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12" + ); + } + } + shuffleArray(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } + } +}; + +// src/Typesense/ApiCall.ts +var import_http = __toESM(require_http()); +var import_https = __toESM(require_https()); +var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios); +var APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; +var HEALTHY = true; +var UNHEALTHY = false; +var isNodeJSEnvironment = typeof process !== "undefined" && process.versions != null && process.versions.node != null; +var ApiCall = class { + constructor(configuration) { + this.configuration = configuration; + this.apiKey = this.configuration.apiKey; + this.nodes = this.configuration.nodes == null ? this.configuration.nodes : JSON.parse(JSON.stringify(this.configuration.nodes)); + this.nearestNode = this.configuration.nearestNode == null ? this.configuration.nearestNode : JSON.parse(JSON.stringify(this.configuration.nearestNode)); + this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds; + this.healthcheckIntervalSeconds = this.configuration.healthcheckIntervalSeconds; + this.numRetriesPerRequest = this.configuration.numRetries; + this.retryIntervalSeconds = this.configuration.retryIntervalSeconds; + this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam; + this.additionalUserHeaders = this.configuration.additionalHeaders; + this.logger = this.configuration.logger; + this.initializeMetadataForNodes(); + this.currentNodeIndex = -1; + } + async get(endpoint, queryParameters = {}, { + abortSignal = null, + responseType = void 0 + } = {}) { + return this.performRequest("get", endpoint, { + queryParameters, + abortSignal, + responseType + }); + } + async delete(endpoint, queryParameters = {}) { + return this.performRequest("delete", endpoint, { queryParameters }); + } + async post(endpoint, bodyParameters = {}, queryParameters = {}, additionalHeaders = {}) { + return this.performRequest("post", endpoint, { + queryParameters, + bodyParameters, + additionalHeaders + }); + } + async put(endpoint, bodyParameters = {}, queryParameters = {}) { + return this.performRequest("put", endpoint, { + queryParameters, + bodyParameters + }); + } + async patch(endpoint, bodyParameters = {}, queryParameters = {}) { + return this.performRequest("patch", endpoint, { + queryParameters, + bodyParameters + }); + } + getAdapter() { + if (!this.configuration.axiosAdapter) return void 0; + if (typeof this.configuration.axiosAdapter === "function") + return this.configuration.axiosAdapter; + const isCloudflareWorkers = typeof navigator !== "undefined" && navigator.userAgent === "Cloudflare-Workers"; + return isCloudflareWorkers ? _axios2.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis) : _axios2.default.getAdapter(this.configuration.axiosAdapter); + } + async performRequest(requestType, endpoint, { + queryParameters = null, + bodyParameters = null, + additionalHeaders = {}, + abortSignal = null, + responseType = void 0, + skipConnectionTimeout = false, + enableKeepAlive = void 0 + }) { + this.configuration.validate(); + const requestNumber = Date.now(); + let lastException; + let wasAborted = false; + this.logger.debug( + `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}` + ); + for (let numTries = 1; numTries <= this.numRetriesPerRequest + 1; numTries++) { + const node = this.getNextNode(requestNumber); + this.logger.debug( + `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${node.index}` + ); + if (abortSignal && abortSignal.aborted) { + return Promise.reject(new Error("Request aborted by caller.")); + } + let abortListener; + try { + const requestOptions = { + adapter: this.getAdapter(), + method: requestType, + url: this.uriFor(endpoint, node), + headers: Object.assign( + {}, + this.defaultHeaders(), + additionalHeaders, + this.additionalUserHeaders + ), + maxContentLength: Infinity, + maxBodyLength: Infinity, + responseType, + validateStatus: (status) => { + return status > 0; + }, + transformResponse: [ + (data, headers) => { + let transformedData = data; + if (headers !== void 0 && typeof data === "string" && headers["content-type"] && headers["content-type"].startsWith("application/json")) { + transformedData = JSON.parse(data); + } + return transformedData; + } + ] + }; + if (skipConnectionTimeout !== true) { + requestOptions.timeout = this.connectionTimeoutSeconds * 1e3; + } + if (queryParameters && Object.keys(queryParameters).length !== 0) { + requestOptions.params = queryParameters; + } + if (this.sendApiKeyAsQueryParam) { + requestOptions.params = requestOptions.params || {}; + requestOptions.params["x-typesense-api-key"] = this.apiKey; + } + if (this.configuration.httpAgent) { + this.logger.debug( + `Request #${requestNumber}: Using custom httpAgent` + ); + requestOptions.httpAgent = this.configuration.httpAgent; + } else if (enableKeepAlive === true) { + if (!isNodeJSEnvironment) { + this.logger.warn( + `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive` + ); + } else { + this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`); + requestOptions.httpAgent = new import_http.Agent({ keepAlive: true }); + } + } + if (this.configuration.httpsAgent) { + this.logger.debug( + `Request #${requestNumber}: Using custom httpsAgent` + ); + requestOptions.httpsAgent = this.configuration.httpsAgent; + } else if (enableKeepAlive === true) { + if (!isNodeJSEnvironment) { + this.logger.warn( + `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive` + ); + } else { + this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`); + requestOptions.httpsAgent = new import_https.Agent({ keepAlive: true }); + } + } + if (this.configuration.paramsSerializer) { + this.logger.debug( + `Request #${requestNumber}: Using custom paramsSerializer` + ); + requestOptions.paramsSerializer = this.configuration.paramsSerializer; + } + if (bodyParameters && (typeof bodyParameters === "string" && bodyParameters.length !== 0 || typeof bodyParameters === "object" && Object.keys(bodyParameters).length !== 0)) { + requestOptions.data = bodyParameters; + } + if (abortSignal) { + const cancelToken = _axios2.default.CancelToken; + const source = cancelToken.source(); + abortListener = () => { + wasAborted = true; + source.cancel(); + }; + abortSignal.addEventListener("abort", abortListener); + requestOptions.cancelToken = source.token; + } + const response = await _axios2.default.call(void 0, requestOptions); + if (response.status >= 1 && response.status <= 499) { + this.setNodeHealthcheck(node, HEALTHY); + } + this.logger.debug( + `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.` + ); + if (response.status >= 200 && response.status < 300) { + return Promise.resolve(response.data); + } else if (response.status < 500) { + return Promise.reject( + this.customErrorForResponse( + response, + _optionalChain([response, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message]), + requestOptions.data + ) + ); + } else { + throw this.customErrorForResponse( + response, + _optionalChain([response, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]), + requestOptions.data + ); + } + } catch (error) { + if (!wasAborted) { + this.setNodeHealthcheck(node, UNHEALTHY); + } + lastException = error; + this.logger.warn( + `Request #${requestNumber}: Request to Node ${node.index} failed due to "${_nullishCoalesce(_optionalChain([error, 'optionalAccess', _6 => _6.code]), () => ( ""))} ${error.message}${error.response == null ? "" : " - " + JSON.stringify(_optionalChain([error, 'access', _7 => _7.response, 'optionalAccess', _8 => _8.data]))}"` + ); + if (wasAborted) { + return Promise.reject(new Error("Request aborted by caller.")); + } + if (numTries < this.numRetriesPerRequest + 1) { + this.logger.warn( + `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...` + ); + } + await this.timer(this.retryIntervalSeconds); + } finally { + if (abortSignal && abortListener) { + abortSignal.removeEventListener("abort", abortListener); + } + } + } + this.logger.debug( + `Request #${requestNumber}: No retries left. Raising last error` + ); + return Promise.reject(lastException); + } + // Attempts to find the next healthy node, looping through the list of nodes once. + // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy + // so we can try the request for good measure, in case that node has become healthy since + getNextNode(requestNumber = 0) { + if (this.nearestNode != null) { + this.logger.debug( + `Request #${requestNumber}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy === true ? "Healthy" : "Unhealthy"}` + ); + if (this.nearestNode.isHealthy === true || this.nodeDueForHealthcheck(this.nearestNode, requestNumber)) { + this.logger.debug( + `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}` + ); + return this.nearestNode; + } + this.logger.debug( + `Request #${requestNumber}: Falling back to individual nodes` + ); + } + this.logger.debug( + `Request #${requestNumber}: Nodes Health: ${this.nodes.map( + (node) => `Node ${node.index} is ${node.isHealthy === true ? "Healthy" : "Unhealthy"}` + ).join(" || ")}` + ); + let candidateNode = this.nodes[0]; + for (let i = 0; i <= this.nodes.length; i++) { + this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length; + candidateNode = this.nodes[this.currentNodeIndex]; + if (candidateNode.isHealthy === true || this.nodeDueForHealthcheck(candidateNode, requestNumber)) { + this.logger.debug( + `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}` + ); + return candidateNode; + } + } + this.logger.debug( + `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}` + ); + return candidateNode; + } + nodeDueForHealthcheck(node, requestNumber = 0) { + const isDueForHealthcheck = Date.now() - node.lastAccessTimestamp > this.healthcheckIntervalSeconds * 1e3; + if (isDueForHealthcheck) { + this.logger.debug( + `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.` + ); + } + return isDueForHealthcheck; + } + initializeMetadataForNodes() { + if (this.nearestNode != null) { + this.nearestNode.index = "nearestNode"; + this.setNodeHealthcheck(this.nearestNode, HEALTHY); + } + this.nodes.forEach((node, i) => { + node.index = i; + this.setNodeHealthcheck(node, HEALTHY); + }); + } + setNodeHealthcheck(node, isHealthy) { + node.isHealthy = isHealthy; + node.lastAccessTimestamp = Date.now(); + } + uriFor(endpoint, node) { + if (node.url != null) { + return `${node.url}${endpoint}`; + } + return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`; + } + defaultHeaders() { + const defaultHeaders = {}; + if (!this.sendApiKeyAsQueryParam) { + defaultHeaders[APIKEYHEADERNAME] = this.apiKey; + } + defaultHeaders["Content-Type"] = "application/json"; + return defaultHeaders; + } + async timer(seconds) { + return new Promise((resolve) => setTimeout(resolve, seconds * 1e3)); + } + customErrorForResponse(response, messageFromServer, httpBody) { + let errorMessage = `Request failed with HTTP code ${response.status}`; + if (typeof messageFromServer === "string" && messageFromServer.trim() !== "") { + errorMessage += ` | Server said: ${messageFromServer}`; + } + let error = new TypesenseError(errorMessage, httpBody, response.status); + if (response.status === 400) { + error = new RequestMalformed(errorMessage); + } else if (response.status === 401) { + error = new RequestUnauthorized(errorMessage); + } else if (response.status === 404) { + error = new ObjectNotFound(errorMessage); + } else if (response.status === 409) { + error = new ObjectAlreadyExists(errorMessage); + } else if (response.status === 422) { + error = new ObjectUnprocessable(errorMessage); + } else if (response.status >= 500 && response.status <= 599) { + error = new ServerError(errorMessage); + } else { + error = new HTTPError(errorMessage); + } + return error; + } +}; + +// src/Typesense/RequestWithCache.ts +var defaultCacheResponseForSeconds = 2 * 60; +var defaultMaxSize = 100; +var RequestWithCache = class { + constructor() { + this.responseCache = /* @__PURE__ */ new Map(); + this.responsePromiseCache = /* @__PURE__ */ new Map(); + } + clearCache() { + this.responseCache = /* @__PURE__ */ new Map(); + this.responsePromiseCache = /* @__PURE__ */ new Map(); + } + // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way + async perform(requestContext, requestFunction, requestFunctionArguments, cacheOptions) { + const { + cacheResponseForSeconds = defaultCacheResponseForSeconds, + maxSize = defaultMaxSize + } = cacheOptions; + const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0; + if (isCacheDisabled) { + return requestFunction.call(requestContext, ...requestFunctionArguments); + } + const requestFunctionArgumentsJSON = JSON.stringify( + requestFunctionArguments + ); + const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON); + const now = Date.now(); + if (cacheEntry) { + const isEntryValid = now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1e3; + if (isEntryValid) { + this.responseCache.delete(requestFunctionArgumentsJSON); + this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry); + return Promise.resolve(cacheEntry.response); + } else { + this.responseCache.delete(requestFunctionArgumentsJSON); + } + } + const cachePromiseEntry = this.responsePromiseCache.get( + requestFunctionArgumentsJSON + ); + if (cachePromiseEntry) { + const isEntryValid = now - cachePromiseEntry.requestTimestamp < cacheResponseForSeconds * 1e3; + if (isEntryValid) { + this.responsePromiseCache.delete(requestFunctionArgumentsJSON); + this.responsePromiseCache.set( + requestFunctionArgumentsJSON, + cachePromiseEntry + ); + return cachePromiseEntry.responsePromise; + } else { + this.responsePromiseCache.delete(requestFunctionArgumentsJSON); + } + } + const responsePromise = requestFunction.call( + requestContext, + ...requestFunctionArguments + ); + this.responsePromiseCache.set(requestFunctionArgumentsJSON, { + requestTimestamp: now, + responsePromise + }); + const response = await responsePromise; + this.responseCache.set(requestFunctionArgumentsJSON, { + requestTimestamp: now, + response + }); + const isCacheOverMaxSize = this.responseCache.size > maxSize; + if (isCacheOverMaxSize) { + const oldestEntry = this.responseCache.keys().next().value; + if (oldestEntry) { + this.responseCache.delete(oldestEntry); + } + } + const isResponsePromiseCacheOverMaxSize = this.responsePromiseCache.size > maxSize; + if (isResponsePromiseCacheOverMaxSize) { + const oldestEntry = this.responsePromiseCache.keys().next().value; + if (oldestEntry) { + this.responsePromiseCache.delete(oldestEntry); + } + } + return response; + } +}; + +// src/Typesense/Collections.ts +var RESOURCEPATH = "/collections"; +var Collections = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async create(schema, options = {}) { + return this.apiCall.post(RESOURCEPATH, schema, options); + } + async retrieve(options = {}) { + return this.apiCall.get(RESOURCEPATH, options); + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +}; + +// src/Typesense/SearchOnlyDocuments.ts +var RESOURCEPATH2 = "/documents"; +var SearchOnlyDocuments = class { + constructor(collectionName, apiCall, configuration) { + this.collectionName = collectionName; + this.apiCall = apiCall; + this.configuration = configuration; + this.requestWithCache = new RequestWithCache(); + } + clearCache() { + this.requestWithCache.clearCache(); + } + async search(searchParameters, { + cacheSearchResultsForSeconds = this.configuration.cacheSearchResultsForSeconds, + abortSignal = null + } = {}) { + const additionalQueryParams = {}; + if (this.configuration.useServerSideSearchCache === true) { + additionalQueryParams["use_cache"] = true; + } + const normalizedParams = normalizeArrayableParams(searchParameters); + const queryParams = Object.assign( + {}, + additionalQueryParams, + normalizedParams + ); + return this.requestWithCache.perform( + this.apiCall, + this.apiCall.get, + [this.endpointPath("search"), queryParams, { abortSignal }], + { + cacheResponseForSeconds: cacheSearchResultsForSeconds + } + ); + } + endpointPath(operation) { + return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH2}${operation === void 0 ? "" : "/" + operation}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH2; + } +}; + +// src/Typesense/Documents.ts +var arrayableParams = { + query_by: "query_by", + query_by_weights: "query_by_weights", + facet_by: "facet_by", + group_by: "group_by", + include_fields: "include_fields", + exclude_fields: "exclude_fields", + highlight_fields: "highlight_fields", + highlight_full_fields: "highlight_full_fields", + pinned_hits: "pinned_hits", + hidden_hits: "hidden_hits", + infix: "infix", + override_tags: "override_tags", + num_typos: "num_typos", + prefix: "prefix", + sort_by: "sort_by" +}; +var isNodeJSEnvironment2 = typeof process !== "undefined" && process.versions != null && process.versions.node != null; +var Documents = class extends SearchOnlyDocuments { + constructor(collectionName, apiCall, configuration) { + super(collectionName, apiCall, configuration); + } + async create(document, options = {}) { + if (!document) throw new Error("No document provided"); + return this.apiCall.post(this.endpointPath(), document, options); + } + async upsert(document, options = {}) { + if (!document) throw new Error("No document provided"); + return this.apiCall.post( + this.endpointPath(), + document, + Object.assign({}, options, { action: "upsert" }) + ); + } + async update(document, options = {}) { + if (!document) throw new Error("No document provided"); + if (options["filter_by"] != null) { + return this.apiCall.patch( + this.endpointPath(), + document, + Object.assign({}, options) + ); + } else { + return this.apiCall.post( + this.endpointPath(), + document, + Object.assign({}, options, { action: "update" }) + ); + } + } + async delete(query = {}) { + return this.apiCall.delete(this.endpointPath(), query); + } + async createMany(documents, options = {}) { + this.configuration.logger.warn( + "createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents" + ); + return this.import(documents, options); + } + async import(documents, options = {}) { + let documentsInJSONLFormat; + if (Array.isArray(documents)) { + try { + documentsInJSONLFormat = documents.map((document) => JSON.stringify(document)).join("\n"); + } catch (error) { + if (error instanceof RangeError && error.message.includes("Too many properties to enumerate")) { + throw new Error(`${error} + It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object + + Please try reducing the number of keys in your document, or using CURL to import your data. + `); + } + throw new Error(error); + } + } else { + documentsInJSONLFormat = documents; + } + const resultsInJSONLFormat = await this.apiCall.performRequest( + "post", + this.endpointPath("import"), + { + queryParameters: options, + bodyParameters: documentsInJSONLFormat, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, + // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully + enableKeepAlive: isNodeJSEnvironment2 ? true : false + // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 + } + ); + if (Array.isArray(documents)) { + const resultsInJSONFormat = resultsInJSONLFormat.split("\n").map((r) => JSON.parse(r)); + const failedItems = resultsInJSONFormat.filter( + (r) => r.success === false + ); + if (failedItems.length > 0) { + throw new ImportError( + `${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, + resultsInJSONFormat, + { + documentsInJSONLFormat, + options, + failedItems, + successCount: resultsInJSONFormat.length - failedItems.length + } + ); + } else { + return resultsInJSONFormat; + } + } else { + return resultsInJSONLFormat; + } + } + /** + * Imports documents from a NodeJS readable stream of JSONL. + */ + async importStream(readableStream, options = {}) { + const resultsInJSONLFormat = await this.apiCall.performRequest( + "post", + this.endpointPath("import"), + { + queryParameters: options, + bodyParameters: readableStream, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, + // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully + enableKeepAlive: isNodeJSEnvironment2 ? true : false + // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 + } + ); + const resultsInJSONFormat = resultsInJSONLFormat.split("\n").map((r) => JSON.parse(r)); + const failedItems = resultsInJSONFormat.filter((r) => r.success === false); + if (failedItems.length > 0) { + throw new ImportError( + `${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, + resultsInJSONFormat, + { + documentsInJSONLFormat: readableStream, + options, + failedItems, + successCount: resultsInJSONFormat.length - failedItems.length + } + ); + } else { + return resultsInJSONFormat; + } + } + /** + * Returns a JSONL string for all the documents in this collection + */ + async export(options = {}) { + return this.apiCall.get(this.endpointPath("export"), options); + } + /** + * Returns a NodeJS readable stream of JSONL for all the documents in this collection. + */ + async exportStream(options = {}) { + return this.apiCall.get(this.endpointPath("export"), options, { + responseType: "stream" + }); + } +}; + +// src/Typesense/Utils.ts +function hasNoArrayValues(params) { + return Object.keys(arrayableParams).filter((key) => params[key] !== void 0).every((key) => isNonArrayValue(params[key])); +} +function normalizeArrayableParams(params) { + const result = { ...params }; + const transformedValues = Object.keys(arrayableParams).filter((key) => Array.isArray(result[key])).map((key) => { + result[key] = result[key].join(","); + return key; + }); + if (!transformedValues.length && hasNoArrayValues(result)) { + return result; + } + if (!hasNoArrayValues(result)) { + throw new Error( + `Failed to normalize arrayable params: ${JSON.stringify(result)}` + ); + } + return result; +} +function isNonArrayValue(value) { + return !Array.isArray(value); +} + +// src/Typesense/MultiSearch.ts +var RESOURCEPATH3 = "/multi_search"; +var MultiSearch = class { + constructor(apiCall, configuration, useTextContentType = false) { + this.apiCall = apiCall; + this.configuration = configuration; + this.useTextContentType = useTextContentType; + this.requestWithCache = new RequestWithCache(); + } + clearCache() { + this.requestWithCache.clearCache(); + } + async perform(searchRequests, commonParams = {}, { + cacheSearchResultsForSeconds = this.configuration.cacheSearchResultsForSeconds + } = {}) { + const additionalHeaders = {}; + if (this.useTextContentType) { + additionalHeaders["content-type"] = "text/plain"; + } + const additionalQueryParams = {}; + if (this.configuration.useServerSideSearchCache === true) { + additionalQueryParams["use_cache"] = true; + } + const queryParams = { ...commonParams, ...additionalQueryParams }; + const normalizedSearchRequests = { + searches: searchRequests.searches.map(normalizeArrayableParams) + }; + const normalizedQueryParams = normalizeArrayableParams(queryParams); + return this.requestWithCache.perform( + this.apiCall, + this.apiCall.post, + [ + RESOURCEPATH3, + normalizedSearchRequests, + normalizedQueryParams, + additionalHeaders + ], + { cacheResponseForSeconds: cacheSearchResultsForSeconds } + ); + } +}; + +// src/Typesense/SearchOnlyCollection.ts +var SearchOnlyCollection = class { + constructor(name, apiCall, configuration) { + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this._documents = new SearchOnlyDocuments( + this.name, + this.apiCall, + this.configuration + ); + } + documents() { + return this._documents; + } +}; + +// src/Typesense/SearchClient.ts +var SearchClient = class { + constructor(options) { + options.sendApiKeyAsQueryParam = _nullishCoalesce(options.sendApiKeyAsQueryParam, () => ( true)); + if (options.sendApiKeyAsQueryParam === true && (options.apiKey || "").length > 2e3) { + console.warn( + "[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter." + ); + options.sendApiKeyAsQueryParam = false; + } + this.configuration = new Configuration(options); + this.apiCall = new ApiCall(this.configuration); + this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true); + this.individualCollections = {}; + } + clearCache() { + this.multiSearch.clearCache(); + Object.entries(this.individualCollections).forEach(([_, collection]) => { + collection.documents().clearCache(); + }); + } + collections(collectionName) { + if (!collectionName) { + throw new Error( + "Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object." + ); + } else { + if (this.individualCollections[collectionName] === void 0) { + this.individualCollections[collectionName] = new SearchOnlyCollection( + collectionName, + this.apiCall, + this.configuration + ); + } + return this.individualCollections[collectionName]; + } + } +}; + +// src/Typesense/Overrides.ts +var RESOURCEPATH4 = "/overrides"; +var Overrides = class _Overrides { + constructor(collectionName, apiCall) { + this.collectionName = collectionName; + this.apiCall = apiCall; + } + async upsert(overrideId, params) { + return this.apiCall.put( + this.endpointPath(overrideId), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${Collections.RESOURCEPATH}/${this.collectionName}${_Overrides.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH4; + } +}; + +// src/Typesense/Override.ts +var Override = class { + constructor(collectionName, overrideId, apiCall) { + this.collectionName = collectionName; + this.overrideId = overrideId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`; + } +}; + +// src/Typesense/Synonyms.ts +var RESOURCEPATH5 = "/synonyms"; +var Synonyms = class _Synonyms { + constructor(collectionName, apiCall) { + this.collectionName = collectionName; + this.apiCall = apiCall; + } + async upsert(synonymId, params) { + return this.apiCall.put( + this.endpointPath(synonymId), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${_Synonyms.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH5; + } +}; + +// src/Typesense/Synonym.ts +var Synonym = class { + constructor(collectionName, synonymId, apiCall) { + this.collectionName = collectionName; + this.synonymId = synonymId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`; + } +}; + +// src/Typesense/Document.ts +var Document = class { + constructor(collectionName, documentId, apiCall) { + this.collectionName = collectionName; + this.documentId = documentId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete(options) { + return this.apiCall.delete(this.endpointPath(), options); + } + async update(partialDocument, options = {}) { + return this.apiCall.patch(this.endpointPath(), partialDocument, options); + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`; + } +}; + +// src/Typesense/Collection.ts +var Collection = class { + constructor(name, apiCall, configuration) { + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this.individualDocuments = {}; + this.individualOverrides = {}; + this.individualSynonyms = {}; + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this._documents = new Documents( + this.name, + this.apiCall, + this.configuration + ); + this._overrides = new Overrides(this.name, this.apiCall); + this._synonyms = new Synonyms(this.name, this.apiCall); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async update(schema) { + return this.apiCall.patch(this.endpointPath(), schema); + } + async delete(options = {}) { + return this.apiCall.delete(this.endpointPath(), options); + } + async exists() { + try { + await this.retrieve(); + return true; + } catch (e) { + if (e instanceof ObjectNotFound) return false; + throw e; + } + } + documents(documentId) { + if (!documentId) { + return this._documents; + } else { + if (this.individualDocuments[documentId] === void 0) { + this.individualDocuments[documentId] = new Document( + this.name, + documentId, + this.apiCall + ); + } + return this.individualDocuments[documentId]; + } + } + overrides(overrideId) { + if (overrideId === void 0) { + return this._overrides; + } else { + if (this.individualOverrides[overrideId] === void 0) { + this.individualOverrides[overrideId] = new Override( + this.name, + overrideId, + this.apiCall + ); + } + return this.individualOverrides[overrideId]; + } + } + synonyms(synonymId) { + if (synonymId === void 0) { + return this._synonyms; + } else { + if (this.individualSynonyms[synonymId] === void 0) { + this.individualSynonyms[synonymId] = new Synonym( + this.name, + synonymId, + this.apiCall + ); + } + return this.individualSynonyms[synonymId]; + } + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +}; + +// src/Typesense/Aliases.ts +var RESOURCEPATH6 = "/aliases"; +var Aliases = class _Aliases { + constructor(apiCall) { + this.apiCall = apiCall; + } + async upsert(name, mapping) { + return this.apiCall.put( + this.endpointPath(name), + mapping + ); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH6); + } + endpointPath(aliasName) { + return `${_Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH6; + } +}; + +// src/Typesense/Alias.ts +var Alias = class { + constructor(name, apiCall) { + this.name = name; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +}; + +// src/Typesense/Keys.ts +var import_crypto = __toESM(require_crypto()); +var RESOURCEPATH7 = "/keys"; +var Keys = class _Keys { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async create(params) { + return this.apiCall.post(_Keys.RESOURCEPATH, params); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH7); + } + generateScopedSearchKey(searchKey, parameters) { + const normalizedParams = normalizeArrayableParams(parameters); + const paramsJSON = JSON.stringify(normalizedParams); + const digest = Buffer.from( + (0, import_crypto.createHmac)("sha256", searchKey).update(paramsJSON).digest("base64") + ); + const keyPrefix = searchKey.substr(0, 4); + const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`; + return Buffer.from(rawScopedKey).toString("base64"); + } + static get RESOURCEPATH() { + return RESOURCEPATH7; + } +}; + +// src/Typesense/Key.ts +var Key = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/Debug.ts +var RESOURCEPATH8 = "/debug"; +var Debug = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH8); + } +}; + +// src/Typesense/Metrics.ts +var RESOURCEPATH9 = "/metrics.json"; +var Metrics = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH9); + } +}; + +// src/Typesense/Stats.ts +var RESOURCEPATH10 = "/stats.json"; +var Metrics2 = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH10); + } +}; + +// src/Typesense/Health.ts +var RESOURCEPATH11 = "/health"; +var Health = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH11); + } +}; + +// src/Typesense/Operations.ts +var RESOURCEPATH12 = "/operations"; +var Operations = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async perform(operationName, queryParameters = {}) { + return this.apiCall.post( + `${RESOURCEPATH12}/${operationName}`, + {}, + queryParameters + ); + } +}; + +// src/Typesense/Presets.ts +var RESOURCEPATH13 = "/presets"; +var Presets = class _Presets { + constructor(apiCall) { + this.apiCall = apiCall; + } + async upsert(presetId, params) { + if (typeof params.value === "object" && "searches" in params.value) { + const normalizedParams2 = params.value.searches.map( + (search) => normalizeArrayableParams(search) + ); + return this.apiCall.put(this.endpointPath(presetId), { + value: { searches: normalizedParams2 } + }); + } + const normalizedParams = normalizeArrayableParams(params.value); + return this.apiCall.put(this.endpointPath(presetId), { + value: normalizedParams + }); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${_Presets.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH13; + } +}; + +// src/Typesense/Preset.ts +var Preset = class { + constructor(presetId, apiCall) { + this.presetId = presetId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`; + } +}; + +// src/Typesense/AnalyticsRules.ts +var RESOURCEPATH14 = "/analytics/rules"; +var AnalyticsRules = class _AnalyticsRules { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async upsert(name, params) { + return this.apiCall.put( + this.endpointPath(name), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${_AnalyticsRules.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH14; + } +}; + +// src/Typesense/AnalyticsRule.ts +var AnalyticsRule = class { + constructor(name, apiCall) { + this.name = name; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +}; + +// src/Typesense/AnalyticsEvents.ts +var RESOURCEPATH15 = "/analytics/events"; +var AnalyticsEvents = class _AnalyticsEvents { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async create(params) { + return this.apiCall.post( + this.endpointPath(), + params + ); + } + endpointPath(operation) { + return `${_AnalyticsEvents.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH15; + } +}; + +// src/Typesense/Analytics.ts +var RESOURCEPATH16 = "/analytics"; +var Analytics = class { + constructor(apiCall) { + this.apiCall = apiCall; + this.individualAnalyticsRules = {}; + this.apiCall = apiCall; + this._analyticsRules = new AnalyticsRules(this.apiCall); + this._analyticsEvents = new AnalyticsEvents(this.apiCall); + } + rules(id) { + if (id === void 0) { + return this._analyticsRules; + } else { + if (this.individualAnalyticsRules[id] === void 0) { + this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall); + } + return this.individualAnalyticsRules[id]; + } + } + events() { + return this._analyticsEvents; + } + static get RESOURCEPATH() { + return RESOURCEPATH16; + } +}; + +// src/Typesense/Stopwords.ts +var RESOURCEPATH17 = "/stopwords"; +var Stopwords = class _Stopwords { + constructor(apiCall) { + this.apiCall = apiCall; + } + async upsert(stopwordId, params) { + return this.apiCall.put( + this.endpointPath(stopwordId), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${_Stopwords.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH17; + } +}; + +// src/Typesense/Stopword.ts +var Stopword = class { + constructor(stopwordId, apiCall) { + this.stopwordId = stopwordId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`; + } +}; + +// src/Typesense/ConversationModels.ts +var RESOURCEPATH18 = "/conversations/models"; +var ConversationModels = class _ConversationModels { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async create(params) { + return this.apiCall.post( + this.endpointPath(), + params + ); + } + async retrieve() { + return this.apiCall.get( + this.endpointPath() + ); + } + endpointPath(operation) { + return `${_ConversationModels.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH18; + } +}; + +// src/Typesense/ConversationModel.ts +var ConversationModel = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async update(params) { + return this.apiCall.put( + this.endpointPath(), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete( + this.endpointPath() + ); + } + endpointPath() { + return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/Conversations.ts +var RESOURCEPATH19 = "/conversations"; +var Conversations = class { + constructor(apiCall) { + this.apiCall = apiCall; + this.individualConversationModels = {}; + this.apiCall = apiCall; + this._conversationsModels = new ConversationModels(this.apiCall); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH19); + } + models(id) { + if (id === void 0) { + return this._conversationsModels; + } else { + if (this.individualConversationModels[id] === void 0) { + this.individualConversationModels[id] = new ConversationModel( + id, + this.apiCall + ); + } + return this.individualConversationModels[id]; + } + } + static get RESOURCEPATH() { + return RESOURCEPATH19; + } +}; + +// src/Typesense/Conversation.ts +var Conversation = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async update(params) { + return this.apiCall.put( + this.endpointPath(), + params + ); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/StemmingDictionaries.ts +var RESOURCEPATH20 = "/stemming/dictionaries"; +var StemmingDictionaries = class _StemmingDictionaries { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async upsert(id, wordRootCombinations) { + const wordRootCombinationsInJSONLFormat = Array.isArray( + wordRootCombinations + ) ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join("\n") : wordRootCombinations; + const resultsInJSONLFormat = await this.apiCall.performRequest( + "post", + this.endpointPath("import"), + { + queryParameters: { id }, + bodyParameters: wordRootCombinationsInJSONLFormat, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true + } + ); + return Array.isArray(wordRootCombinations) ? resultsInJSONLFormat.split("\n").map((line) => JSON.parse(line)) : resultsInJSONLFormat; + } + async retrieve() { + return this.apiCall.get( + this.endpointPath() + ); + } + endpointPath(operation) { + return operation === void 0 ? `${_StemmingDictionaries.RESOURCEPATH}` : `${_StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH20; + } +}; + +// src/Typesense/StemmingDictionary.ts +var StemmingDictionary = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath() { + return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/Stemming.ts +var RESOURCEPATH21 = "/stemming"; +var Stemming = class { + constructor(apiCall) { + this.apiCall = apiCall; + this.individualStemmingDictionaries = {}; + this.apiCall = apiCall; + this._stemmingDictionaries = new StemmingDictionaries(this.apiCall); + } + dictionaries(id) { + if (id === void 0) { + return this._stemmingDictionaries; + } else { + if (this.individualStemmingDictionaries[id] === void 0) { + this.individualStemmingDictionaries[id] = new StemmingDictionary( + id, + this.apiCall + ); + } + return this.individualStemmingDictionaries[id]; + } + } + static get RESOURCEPATH() { + return RESOURCEPATH21; + } +}; + +// src/Typesense/Client.ts +var Client = class { + constructor(options) { + options.sendApiKeyAsQueryParam = _nullishCoalesce(options.sendApiKeyAsQueryParam, () => ( false)); + this.configuration = new Configuration(options); + this.apiCall = new ApiCall(this.configuration); + this.debug = new Debug(this.apiCall); + this.metrics = new Metrics(this.apiCall); + this.stats = new Metrics2(this.apiCall); + this.health = new Health(this.apiCall); + this.operations = new Operations(this.apiCall); + this.multiSearch = new MultiSearch(this.apiCall, this.configuration); + this._collections = new Collections(this.apiCall); + this.individualCollections = {}; + this._aliases = new Aliases(this.apiCall); + this.individualAliases = {}; + this._keys = new Keys(this.apiCall); + this.individualKeys = {}; + this._presets = new Presets(this.apiCall); + this.individualPresets = {}; + this._stopwords = new Stopwords(this.apiCall); + this.individualStopwords = {}; + this.analytics = new Analytics(this.apiCall); + this.stemming = new Stemming(this.apiCall); + this._conversations = new Conversations(this.apiCall); + this.individualConversations = {}; + } + collections(collectionName) { + if (collectionName === void 0) { + return this._collections; + } else { + if (this.individualCollections[collectionName] === void 0) { + this.individualCollections[collectionName] = new Collection( + collectionName, + this.apiCall, + this.configuration + ); + } + return this.individualCollections[collectionName]; + } + } + aliases(aliasName) { + if (aliasName === void 0) { + return this._aliases; + } else { + if (this.individualAliases[aliasName] === void 0) { + this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall); + } + return this.individualAliases[aliasName]; + } + } + keys(id) { + if (id === void 0) { + return this._keys; + } else { + if (this.individualKeys[id] === void 0) { + this.individualKeys[id] = new Key(id, this.apiCall); + } + return this.individualKeys[id]; + } + } + presets(id) { + if (id === void 0) { + return this._presets; + } else { + if (this.individualPresets[id] === void 0) { + this.individualPresets[id] = new Preset(id, this.apiCall); + } + return this.individualPresets[id]; + } + } + stopwords(id) { + if (id === void 0) { + return this._stopwords; + } else { + if (this.individualStopwords[id] === void 0) { + this.individualStopwords[id] = new Stopword(id, this.apiCall); + } + return this.individualStopwords[id]; + } + } + conversations(id) { + if (id === void 0) { + return this._conversations; + } else { + if (this.individualConversations[id] === void 0) { + this.individualConversations[id] = new Conversation(id, this.apiCall); + } + return this.individualConversations[id]; + } + } +}; + + + + +exports.Client = Client; exports.Errors = Errors_exports; exports.SearchClient = SearchClient; diff --git a/lib/Typesense.min.js b/dist/typesense.min.js similarity index 51% rename from lib/Typesense.min.js rename to dist/typesense.min.js index d054c090..fe4c9e57 100644 --- a/lib/Typesense.min.js +++ b/dist/typesense.min.js @@ -1,9 +1,11 @@ -"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var Ke=Object.create;var fe=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var ye=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ze=(r,e)=>{for(var t in e)fe(r,t,{get:e[t],enumerable:!0})},Le=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of We(e))!je.call(r,s)&&s!==t&&fe(r,s,{get:()=>e[s],enumerable:!(i=Me(e,s))||i.enumerable});return r};var ge=(r,e,t)=>(t=r!=null?Ke(Fe(r)):{},Le(e||!r||!r.__esModule?fe(t,"default",{value:r,enumerable:!0}):t,r));var _e=ye((jt,xe)=>{"use strict";xe.exports={}});var be=ye((zt,Ae)=>{"use strict";Ae.exports={}});var $e=ye((Yr,He)=>{"use strict";He.exports={}});var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel);var Re={};ze(Re,{HTTPError:()=>R,ImportError:()=>g,MissingConfigurationError:()=>f,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>y,ObjectUnprocessable:()=>_,RequestMalformed:()=>A,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype)}};var R=class extends l{};var f=class extends l{};var x=class extends l{};var y=class extends l{};var _=class extends l{};var A=class extends l{};var b=class extends l{};var T=class extends l{};var g=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==void 0&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||_loglevel2.default,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new f("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new f("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new f("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}};var Ee=ge(_e()),we=ge(be());var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var Je="X-TYPESENSE-API-KEY",Ce=!0,Be=!1,Te=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:i=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},s={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:s})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?_axios2.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis):_axios2.default.getAdapter(this.configuration.axiosAdapter):void 0}async performRequest(e,t,{queryParameters:i=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:a=null,responseType:h=void 0,skipConnectionTimeout:m=!1,enableKeepAlive:C=void 0}){this.configuration.validate();let c=Date.now(),S,F=!1;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:j=>j>0,transformResponse:[(j,z)=>{let Pe=j;return z!==void 0&&typeof j=="string"&&z["content-type"]&&z["content-type"].startsWith("application/json")&&(Pe=JSON.parse(j)),Pe}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new Ee.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new we.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(o.data=s),a){let z=_axios2.default.CancelToken.source();Q=()=>{F=!0,z.cancel()},a.addEventListener("abort",Q),o.cancelToken=z.token}let d=await _axios2.default.call(void 0, o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Ce),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,_optionalChain([d, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message]),o.data));throw this.customErrorForResponse(d,_optionalChain([d, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]),o.data)}catch(o){if(F||this.setNodeHealthcheck(P,Be),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${_nullishCoalesce(_optionalChain([o, 'optionalAccess', _6 => _6.code]), () => (""))} ${o.message}${o.response==null?"":" - "+JSON.stringify(_optionalChain([o, 'access', _7 => _7.response, 'optionalAccess', _8 => _8.data]))}"`),F)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Ce)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Ce)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Je]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let s=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(s+=` | Server said: ${t}`);let n=new l(s,i,e.status);return e.status===400?n=new A(s):e.status===401?n=new b(s):e.status===404?n=new y(s):e.status===409?n=new x(s):e.status===422?n=new _(s):e.status>=500&&e.status<=599?n=new T(s):n=new R(s),n}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,i,s){let{cacheResponseForSeconds:n=120,maxSize:a=100}=s;if(n<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o)}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o)}return v}};var Se="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(Se,e,t)}async retrieve(e={}){return this.apiCall.get(Se,e)}static get RESOURCEPATH(){return Se}};var Oe="/documents",L=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);let n=u(e),a=Object.assign({},s,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Oe}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var ve={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},Ne=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,N=class extends L{constructor(e,t,i){super(e,t,i)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(n=>JSON.stringify(n)).join(` -`)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var Fe=Object.create;var Ce=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,Je=Object.prototype.hasOwnProperty;var Se=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Qe=(r,e)=>{for(var t in e)Ce(r,t,{get:e[t],enumerable:!0})},Be=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ze(e))!Je.call(r,n)&&n!==t&&Ce(r,n,{get:()=>e[n],enumerable:!(i=je(e,n))||i.enumerable});return r};var ve=(r,e,t)=>(t=r!=null?Fe(Le(r)):{},Be(e||!r||!r.__esModule?Ce(t,"default",{value:r,enumerable:!0}):t,r));var Te=Se((Bt,be)=>{"use strict";be.exports={}});var we=Se((Vt,Ee)=>{"use strict";Ee.exports={}});var ke=Se((ti,Ie)=>{"use strict";Ie.exports={}});var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel);var _e={};Qe(_e,{HTTPError:()=>R,ImportError:()=>y,MissingConfigurationError:()=>g,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>f,ObjectUnprocessable:()=>A,RequestMalformed:()=>_,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype)}};var R=class extends l{};var g=class extends l{};var x=class extends l{};var f=class extends l{};var A=class extends l{};var _=class extends l{};var b=class extends l{};var T=class extends l{};var y=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==void 0&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||_loglevel2.default,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new g("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new g("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new g("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}};var De=ve(Te()),Ne=ve(we());var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var Ye="X-TYPESENSE-API-KEY",Pe=!0,Ge=!1,Oe=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:i=null,responseType:n=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:n})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},n={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:n})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?_axios2.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis):_axios2.default.getAdapter(this.configuration.axiosAdapter):void 0}async performRequest(e,t,{queryParameters:i=null,bodyParameters:n=null,additionalHeaders:s={},abortSignal:a=null,responseType:h=void 0,skipConnectionTimeout:m=!1,enableKeepAlive:C=void 0}){this.configuration.validate();let c=Date.now(),S,j=!1;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),s,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:z=>z>0,transformResponse:[(z,L)=>{let Ae=z;return L!==void 0&&typeof z=="string"&&L["content-type"]&&L["content-type"].startsWith("application/json")&&(Ae=JSON.parse(z)),Ae}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Oe?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new De.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Oe?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new Ne.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),n&&(typeof n=="string"&&n.length!==0||typeof n=="object"&&Object.keys(n).length!==0)&&(o.data=n),a){let L=_axios2.default.CancelToken.source();Q=()=>{j=!0,L.cancel()},a.addEventListener("abort",Q),o.cancelToken=L.token}let d=await _axios2.default.call(void 0, o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Pe),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,_optionalChain([d, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message]),o.data));throw this.customErrorForResponse(d,_optionalChain([d, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]),o.data)}catch(o){if(j||this.setNodeHealthcheck(P,Ge),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${_nullishCoalesce(_optionalChain([o, 'optionalAccess', _6 => _6.code]), () => (""))} ${o.message}${o.response==null?"":" - "+JSON.stringify(_optionalChain([o, 'access', _7 => _7.response, 'optionalAccess', _8 => _8.data]))}"`),j)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Pe)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Pe)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ye]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let n=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(n+=` | Server said: ${t}`);let s=new l(n,i,e.status);return e.status===400?s=new _(n):e.status===401?s=new b(n):e.status===404?s=new f(n):e.status===409?s=new x(n):e.status===422?s=new A(n):e.status>=500&&e.status<=599?s=new T(n):s=new R(n),s}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,i,n){let{cacheResponseForSeconds:s=120,maxSize:a=100}=n;if(s<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o)}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o)}return v}};var Re="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(Re,e,t)}async retrieve(e={}){return this.apiCall.get(Re,e)}static get RESOURCEPATH(){return Re}};var Ue="/documents",J=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let s=u(e),a=Object.assign({},n,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ue}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ue}};var xe={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},He=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,D=class extends J{constructor(e,t,i){super(e,t,i)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(s=>JSON.stringify(s)).join(` +`)}catch(s){throw s instanceof RangeError&&s.message.includes("Too many properties to enumerate")?new Error(`${s} It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object Please try reducing the number of keys in your document, or using CURL to import your data. - `):new Error(n)}else i=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne});if(Array.isArray(e)){let n=s.split(` -`).map(h=>JSON.parse(h)),a=n.filter(h=>h.success===!1);if(a.length>0)throw new g(`${n.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:n.length-a.length});return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne})).split(` -`).map(a=>JSON.parse(a)),n=s.filter(a=>a.success===!1);if(n.length>0)throw new g(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:e,options:t,failedItems:n,successCount:s.length-n.length});return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function De(r){return Object.keys(ve).filter(e=>r[e]!==void 0).every(e=>Ve(r[e]))}function u(r){let e={...r};if(!Object.keys(ve).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&De(e))return e;if(!De(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Ve(r){return!Array.isArray(r)}var Ye="/multi_search",D=class{constructor(e,t,i=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let a={...t,...n},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ye,h,m,s],{cacheResponseForSeconds:i})}};var me=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new L(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var de=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Ge="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ge}};var J=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var Xe="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Xe}};var B=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var he=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${N.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var V=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new N(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof y)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new he(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new J(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new B(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ue="/aliases",$=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(Ue)}endpointPath(e){return`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ue}};var Y=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ie=ge($e());var qe="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(qe)}generateScopedSearchKey(e,t){let i=u(t),s=JSON.stringify(i),n=Buffer.from((0,Ie.createHmac)("sha256",e).update(s).digest("base64")),a=e.substr(0,4),h=`${n}${a}${s}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var Ze="/debug",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ze)}};var et="/metrics.json",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(et)}};var tt="/stats.json",ee=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(tt)}};var rt="/health",te=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(rt)}};var it="/operations",re=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${it}/${e}`,{},t)}};var st="/presets",I=class r{constructor(e){this.apiCall=e}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let s=t.value.searches.map(n=>u(n));return this.apiCall.put(this.endpointPath(e),{value:{searches:s}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return st}};var ie=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var nt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return nt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ot="/analytics/events",ne=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ot}};var at="/analytics",oe=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new ne(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return at}};var lt="/stopwords",K=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var ae=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var ct="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var le=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ke="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall)}async retrieve(){return this.apiCall.get(ke)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new le(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return ke}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ue=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new X(this.apiCall),this.metrics=new Z(this.apiCall),this.stats=new ee(this.apiCall),this.health=new te(this.apiCall),this.operations=new re(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new oe(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new V(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new Y(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new G(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new ie(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ae(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ce(e,this.apiCall)),this.individualConversations[e])}};exports.Client = ue; exports.Errors = Re; exports.SearchClient = de; -//# sourceMappingURL=Typesense.min.js.map \ No newline at end of file + `):new Error(s)}else i=e;let n=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!He});if(Array.isArray(e)){let s=n.split(` +`).map(h=>JSON.parse(h)),a=s.filter(h=>h.success===!1);if(a.length>0)throw new y(`${s.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:s.length-a.length});return s}else return n}async importStream(e,t={}){let n=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!He})).split(` +`).map(a=>JSON.parse(a)),s=n.filter(a=>a.success===!1);if(s.length>0)throw new y(`${n.length-s.length} documents imported successfully, ${s.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:e,options:t,failedItems:s,successCount:n.length-s.length});return n}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function $e(r){return Object.keys(xe).filter(e=>r[e]!==void 0).every(e=>Xe(r[e]))}function u(r){let e={...r};if(!Object.keys(xe).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&$e(e))return e;if(!$e(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Xe(r){return!Array.isArray(r)}var Ze="/multi_search",N=class{constructor(e,t,i=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let n={};this.useTextContentType&&(n["content-type"]="text/plain");let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);let a={...t,...s},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ze,h,m,n],{cacheResponseForSeconds:i})}};var ue=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new J(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ge=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new N(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new ue(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var et="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return et}};var B=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var tt="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return tt}};var V=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var fe=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${D.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var Y=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new D(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof f)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new fe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new B(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new V(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var qe="/aliases",$=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(qe)}endpointPath(e){return`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Me=ve(ke());var Ke="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Ke)}generateScopedSearchKey(e,t){let i=u(t),n=JSON.stringify(i),s=Buffer.from((0,Me.createHmac)("sha256",e).update(n).digest("base64")),a=e.substr(0,4),h=`${s}${a}${n}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return Ke}};var X=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var rt="/debug",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(rt)}};var it="/metrics.json",ee=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(it)}};var nt="/stats.json",te=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(nt)}};var st="/health",re=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(st)}};var ot="/operations",ie=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ot}/${e}`,{},t)}};var at="/presets",I=class r{constructor(e){this.apiCall=e}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let n=t.value.searches.map(s=>u(s));return this.apiCall.put(this.endpointPath(e),{value:{searches:n}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return at}};var ne=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var lt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ct="/analytics/events",oe=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var pt="/analytics",ae=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new oe(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return pt}};var mt="/stopwords",K=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return mt}};var le=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var dt="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return dt}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var We="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall)}async retrieve(){return this.apiCall.get(We)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new ce(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return We}};var pe=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ht="/stemming/dictionaries",F=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){let i=Array.isArray(t)?t.map(s=>JSON.stringify(s)).join(` +`):t,n=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:{id:e},bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0});return Array.isArray(t)?n.split(` +`).map(s=>JSON.parse(s)):n}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return e===void 0?`${r.RESOURCEPATH}`:`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return ht}};var me=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(){return`${F.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ut="/stemming",de=class{constructor(e){this.apiCall=e;this.individualStemmingDictionaries={};this.apiCall=e,this._stemmingDictionaries=new F(this.apiCall)}dictionaries(e){return e===void 0?this._stemmingDictionaries:(this.individualStemmingDictionaries[e]===void 0&&(this.individualStemmingDictionaries[e]=new me(e,this.apiCall)),this.individualStemmingDictionaries[e])}static get RESOURCEPATH(){return ut}};var ye=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new Z(this.apiCall),this.metrics=new ee(this.apiCall),this.stats=new te(this.apiCall),this.health=new re(this.apiCall),this.operations=new ie(this.apiCall),this.multiSearch=new N(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new ae(this.apiCall),this.stemming=new de(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new Y(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new G(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new X(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new ne(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new le(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new pe(e,this.apiCall)),this.individualConversations[e])}};exports.Client = ye; exports.Errors = _e; exports.SearchClient = ge; +//# sourceMappingURL=typesense.min.js.map \ No newline at end of file diff --git a/dist/typesense.min.js.map b/dist/typesense.min.js.map new file mode 100644 index 00000000..e6282f01 --- /dev/null +++ b/dist/typesense.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["/home/fanis/code/typesense/js-lib/dist/typesense.min.js","node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/Alias.ts","../src/Typesense/StemmingDictionaries.ts","../src/Typesense/Client.ts"],"names":["require_http","__commonJSMin","exports","module","require_https","require_crypto","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","httpBody","httpStatus","importResults","payload","Configuration","options","node","logger","key","array","i","j","import_http","import_https","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted"],"mappings":"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","file":"/home/fanis/code/typesense/js-lib/dist/typesense.min.js","sourcesContent":[null,"module.exports = {}","module.exports = {}","module.exports = {}","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport type DeleteQuery =\n | {\n truncate?: true;\n }\n | {\n truncate?: never;\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n };\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n max_filter_by_candidates?: number; // default: 4\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport type { StemmingDictionaryCreateSchema } from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming/dictionaries\";\n\nexport interface StemmingDictionariesRetrieveSchema {\n dictionaries: string[];\n}\n\nexport default class StemmingDictionaries {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n id: string,\n wordRootCombinations: StemmingDictionaryCreateSchema[] | string,\n ): Promise {\n const wordRootCombinationsInJSONLFormat = Array.isArray(\n wordRootCombinations,\n )\n ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join(\"\\n\")\n : wordRootCombinations;\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: {id},\n bodyParameters: wordRootCombinationsInJSONLFormat,\n additionalHeaders: {\"Content-Type\": \"text/plain\"},\n skipConnectionTimeout: true,\n }\n );\n\n return Array.isArray(wordRootCombinations)\n ? resultsInJSONLFormat\n .split(\"\\n\")\n .map((line) => JSON.parse(line) as StemmingDictionaryCreateSchema)\n : resultsInJSONLFormat;\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return operation === undefined\n ? `${StemmingDictionaries.RESOURCEPATH}`\n : `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\nimport Stemming from \"./Stemming\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n stemming: Stemming;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this.stemming = new Stemming(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"]} \ No newline at end of file diff --git a/dist/typesense.min.mjs b/dist/typesense.min.mjs new file mode 100644 index 00000000..95faae63 --- /dev/null +++ b/dist/typesense.min.mjs @@ -0,0 +1,11 @@ +var Fe=Object.create;var Ce=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,Je=Object.prototype.hasOwnProperty;var Se=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Qe=(r,e)=>{for(var t in e)Ce(r,t,{get:e[t],enumerable:!0})},Be=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ze(e))!Je.call(r,n)&&n!==t&&Ce(r,n,{get:()=>e[n],enumerable:!(i=je(e,n))||i.enumerable});return r};var ve=(r,e,t)=>(t=r!=null?Fe(Le(r)):{},Be(e||!r||!r.__esModule?Ce(t,"default",{value:r,enumerable:!0}):t,r));var Te=Se((Bt,be)=>{"use strict";be.exports={}});var we=Se((Vt,Ee)=>{"use strict";Ee.exports={}});var ke=Se((ti,Ie)=>{"use strict";Ie.exports={}});import Ve from"loglevel";var _e={};Qe(_e,{HTTPError:()=>R,ImportError:()=>y,MissingConfigurationError:()=>g,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>f,ObjectUnprocessable:()=>A,RequestMalformed:()=>_,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype)}};var R=class extends l{};var g=class extends l{};var x=class extends l{};var f=class extends l{};var A=class extends l{};var _=class extends l{};var b=class extends l{};var T=class extends l{};var y=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==void 0&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||Ve,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new g("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new g("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new g("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}};var De=ve(Te()),Ne=ve(we());import he from"axios";var Ye="X-TYPESENSE-API-KEY",Pe=!0,Ge=!1,Oe=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:i=null,responseType:n=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:n})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},n={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:n})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?he.getAdapter(this.configuration.axiosAdapter).bind(globalThis):he.getAdapter(this.configuration.axiosAdapter):void 0}async performRequest(e,t,{queryParameters:i=null,bodyParameters:n=null,additionalHeaders:s={},abortSignal:a=null,responseType:h=void 0,skipConnectionTimeout:m=!1,enableKeepAlive:C=void 0}){this.configuration.validate();let c=Date.now(),S,j=!1;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),s,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:z=>z>0,transformResponse:[(z,L)=>{let Ae=z;return L!==void 0&&typeof z=="string"&&L["content-type"]&&L["content-type"].startsWith("application/json")&&(Ae=JSON.parse(z)),Ae}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Oe?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new De.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Oe?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new Ne.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),n&&(typeof n=="string"&&n.length!==0||typeof n=="object"&&Object.keys(n).length!==0)&&(o.data=n),a){let L=he.CancelToken.source();Q=()=>{j=!0,L.cancel()},a.addEventListener("abort",Q),o.cancelToken=L.token}let d=await he(o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Pe),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,d.data?.message,o.data));throw this.customErrorForResponse(d,d.data?.message,o.data)}catch(o){if(j||this.setNodeHealthcheck(P,Ge),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${o?.code??""} ${o.message}${o.response==null?"":" - "+JSON.stringify(o.response?.data)}"`),j)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Pe)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Pe)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ye]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let n=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(n+=` | Server said: ${t}`);let s=new l(n,i,e.status);return e.status===400?s=new _(n):e.status===401?s=new b(n):e.status===404?s=new f(n):e.status===409?s=new x(n):e.status===422?s=new A(n):e.status>=500&&e.status<=599?s=new T(n):s=new R(n),s}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,i,n){let{cacheResponseForSeconds:s=120,maxSize:a=100}=n;if(s<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o)}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o)}return v}};var Re="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(Re,e,t)}async retrieve(e={}){return this.apiCall.get(Re,e)}static get RESOURCEPATH(){return Re}};var Ue="/documents",J=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let s=u(e),a=Object.assign({},n,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ue}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ue}};var xe={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},He=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,D=class extends J{constructor(e,t,i){super(e,t,i)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(s=>JSON.stringify(s)).join(` +`)}catch(s){throw s instanceof RangeError&&s.message.includes("Too many properties to enumerate")?new Error(`${s} + It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object + + Please try reducing the number of keys in your document, or using CURL to import your data. + `):new Error(s)}else i=e;let n=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!He});if(Array.isArray(e)){let s=n.split(` +`).map(h=>JSON.parse(h)),a=s.filter(h=>h.success===!1);if(a.length>0)throw new y(`${s.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:s.length-a.length});return s}else return n}async importStream(e,t={}){let n=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!He})).split(` +`).map(a=>JSON.parse(a)),s=n.filter(a=>a.success===!1);if(s.length>0)throw new y(`${n.length-s.length} documents imported successfully, ${s.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:e,options:t,failedItems:s,successCount:n.length-s.length});return n}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function $e(r){return Object.keys(xe).filter(e=>r[e]!==void 0).every(e=>Xe(r[e]))}function u(r){let e={...r};if(!Object.keys(xe).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&$e(e))return e;if(!$e(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Xe(r){return!Array.isArray(r)}var Ze="/multi_search",N=class{constructor(e,t,i=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let n={};this.useTextContentType&&(n["content-type"]="text/plain");let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);let a={...t,...s},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ze,h,m,n],{cacheResponseForSeconds:i})}};var ue=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new J(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ge=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new N(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new ue(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var et="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return et}};var B=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var tt="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return tt}};var V=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var fe=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${D.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var Y=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new D(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof f)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new fe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new B(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new V(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var qe="/aliases",$=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(qe)}endpointPath(e){return`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Me=ve(ke());var Ke="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Ke)}generateScopedSearchKey(e,t){let i=u(t),n=JSON.stringify(i),s=Buffer.from((0,Me.createHmac)("sha256",e).update(n).digest("base64")),a=e.substr(0,4),h=`${s}${a}${n}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return Ke}};var X=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var rt="/debug",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(rt)}};var it="/metrics.json",ee=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(it)}};var nt="/stats.json",te=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(nt)}};var st="/health",re=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(st)}};var ot="/operations",ie=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ot}/${e}`,{},t)}};var at="/presets",I=class r{constructor(e){this.apiCall=e}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let n=t.value.searches.map(s=>u(s));return this.apiCall.put(this.endpointPath(e),{value:{searches:n}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return at}};var ne=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var lt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ct="/analytics/events",oe=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var pt="/analytics",ae=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new oe(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return pt}};var mt="/stopwords",K=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return mt}};var le=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var dt="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return dt}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var We="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall)}async retrieve(){return this.apiCall.get(We)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new ce(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return We}};var pe=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ht="/stemming/dictionaries",F=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){let i=Array.isArray(t)?t.map(s=>JSON.stringify(s)).join(` +`):t,n=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:{id:e},bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0});return Array.isArray(t)?n.split(` +`).map(s=>JSON.parse(s)):n}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return e===void 0?`${r.RESOURCEPATH}`:`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return ht}};var me=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(){return`${F.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ut="/stemming",de=class{constructor(e){this.apiCall=e;this.individualStemmingDictionaries={};this.apiCall=e,this._stemmingDictionaries=new F(this.apiCall)}dictionaries(e){return e===void 0?this._stemmingDictionaries:(this.individualStemmingDictionaries[e]===void 0&&(this.individualStemmingDictionaries[e]=new me(e,this.apiCall)),this.individualStemmingDictionaries[e])}static get RESOURCEPATH(){return ut}};var ye=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new Z(this.apiCall),this.metrics=new ee(this.apiCall),this.stats=new te(this.apiCall),this.health=new re(this.apiCall),this.operations=new ie(this.apiCall),this.multiSearch=new N(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new ae(this.apiCall),this.stemming=new de(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new Y(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new G(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new X(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new ne(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new le(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new pe(e,this.apiCall)),this.individualConversations[e])}};export{ye as Client,_e as Errors,ge as SearchClient}; +//# sourceMappingURL=typesense.min.mjs.map \ No newline at end of file diff --git a/dist/typesense.min.mjs.map b/dist/typesense.min.mjs.map new file mode 100644 index 00000000..6ecc17fb --- /dev/null +++ b/dist/typesense.min.mjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/Collections.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Utils.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/StemmingDictionaries.ts","../src/Typesense/StemmingDictionary.ts","../src/Typesense/Stemming.ts","../src/Typesense/Client.ts"],"sourcesContent":["module.exports = {}","module.exports = {}","module.exports = {}","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport type DeleteQuery =\n | {\n truncate?: true;\n }\n | {\n truncate?: never;\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n };\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n max_filter_by_candidates?: number; // default: 4\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n rerank_hybrid_matches?: boolean;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n union?: true;\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopolygon\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema\n extends Pick<\n CollectionCreateSchema,\n \"token_separators\" | \"symbols_to_index\"\n > {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName:\n | \"vote\"\n | \"snapshot\"\n | \"cache/clear\"\n | \"schema_changes\"\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters,\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport type { StemmingDictionaryCreateSchema } from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming/dictionaries\";\n\nexport interface StemmingDictionariesRetrieveSchema {\n dictionaries: string[];\n}\n\nexport default class StemmingDictionaries {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n id: string,\n wordRootCombinations: StemmingDictionaryCreateSchema[] | string,\n ): Promise {\n const wordRootCombinationsInJSONLFormat = Array.isArray(\n wordRootCombinations,\n )\n ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join(\"\\n\")\n : wordRootCombinations;\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: {id},\n bodyParameters: wordRootCombinationsInJSONLFormat,\n additionalHeaders: {\"Content-Type\": \"text/plain\"},\n skipConnectionTimeout: true,\n }\n );\n\n return Array.isArray(wordRootCombinations)\n ? resultsInJSONLFormat\n .split(\"\\n\")\n .map((line) => JSON.parse(line) as StemmingDictionaryCreateSchema)\n : resultsInJSONLFormat;\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return operation === undefined\n ? `${StemmingDictionaries.RESOURCEPATH}`\n : `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\n\nexport interface StemmingDictionaryCreateSchema {\n root: string;\n word: string;\n}\n\nexport interface StemmingDictionarySchema {\n id: string;\n words: StemmingDictionaryCreateSchema[];\n}\n\nexport default class StemmingDictionary {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import type ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\nimport StemmingDictionary from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming\";\n\nexport default class Stemming {\n private readonly _stemmingDictionaries: StemmingDictionaries;\n private readonly individualStemmingDictionaries: Record<\n string,\n StemmingDictionary\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._stemmingDictionaries = new StemmingDictionaries(this.apiCall);\n }\n\n dictionaries(): StemmingDictionaries;\n dictionaries(id: string): StemmingDictionary;\n dictionaries(id?: string): StemmingDictionaries | StemmingDictionary {\n if (id === undefined) {\n return this._stemmingDictionaries;\n } else {\n if (this.individualStemmingDictionaries[id] === undefined) {\n this.individualStemmingDictionaries[id] = new StemmingDictionary(\n id,\n this.apiCall,\n );\n }\n return this.individualStemmingDictionaries[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\nimport Stemming from \"./Stemming\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n stemming: Stemming;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this.stemming = new Stemming(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"],"mappings":"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","names":["require_http","__commonJSMin","exports","module","require_https","__commonJSMin","exports","module","require_crypto","__commonJSMin","exports","module","logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","httpBody","httpStatus","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","payload","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","import_http","import_https","axios","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","HTTPAgent","HTTPSAgent","source","response","error","candidateNode","isDueForHealthcheck","i","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","httpBody","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","Collections","apiCall","schema","options","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","normalizedParams","normalizeArrayableParams","queryParams","operation","Collections","arrayableParams","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","hasNoArrayValues","params","arrayableParams","key","isNonArrayValue","normalizeArrayableParams","result","value","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","normalizedSearchRequests","normalizeArrayableParams","normalizedQueryParams","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","options","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","import_crypto","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","normalizedParams","normalizeArrayableParams","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","normalizedParams","search","normalizeArrayableParams","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","RESOURCEPATH","StemmingDictionaries","_StemmingDictionaries","apiCall","id","wordRootCombinations","wordRootCombinationsInJSONLFormat","combo","resultsInJSONLFormat","line","operation","StemmingDictionary","id","apiCall","StemmingDictionaries","RESOURCEPATH","Stemming","apiCall","StemmingDictionaries","id","StemmingDictionary","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Stemming","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation"]} \ No newline at end of file diff --git a/dist/typesense.mjs b/dist/typesense.mjs new file mode 100644 index 00000000..1451f876 --- /dev/null +++ b/dist/typesense.mjs @@ -0,0 +1,1779 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// node-modules-polyfills-empty:http +var require_http = __commonJS({ + "node-modules-polyfills-empty:http"(exports, module) { + "use strict"; + module.exports = {}; + } +}); + +// node-modules-polyfills-empty:https +var require_https = __commonJS({ + "node-modules-polyfills-empty:https"(exports, module) { + "use strict"; + module.exports = {}; + } +}); + +// node-modules-polyfills-empty:crypto +var require_crypto = __commonJS({ + "node-modules-polyfills-empty:crypto"(exports, module) { + "use strict"; + module.exports = {}; + } +}); + +// src/Typesense/Configuration.ts +import logger from "loglevel"; + +// src/Typesense/Errors/index.ts +var Errors_exports = {}; +__export(Errors_exports, { + HTTPError: () => HTTPError, + ImportError: () => ImportError, + MissingConfigurationError: () => MissingConfigurationError, + ObjectAlreadyExists: () => ObjectAlreadyExists, + ObjectNotFound: () => ObjectNotFound, + ObjectUnprocessable: () => ObjectUnprocessable, + RequestMalformed: () => RequestMalformed, + RequestUnauthorized: () => RequestUnauthorized, + ServerError: () => ServerError, + TypesenseError: () => TypesenseError +}); + +// src/Typesense/Errors/TypesenseError.ts +var TypesenseError = class extends Error { + // Source: https://stackoverflow.com/a/58417721/123545 + constructor(message, httpBody, httpStatus) { + super(message); + this.name = new.target.name; + this.httpBody = httpBody; + this.httpStatus = httpStatus; + Object.setPrototypeOf(this, new.target.prototype); + } +}; + +// src/Typesense/Errors/HTTPError.ts +var HTTPError = class extends TypesenseError { +}; + +// src/Typesense/Errors/MissingConfigurationError.ts +var MissingConfigurationError = class extends TypesenseError { +}; + +// src/Typesense/Errors/ObjectAlreadyExists.ts +var ObjectAlreadyExists = class extends TypesenseError { +}; + +// src/Typesense/Errors/ObjectNotFound.ts +var ObjectNotFound = class extends TypesenseError { +}; + +// src/Typesense/Errors/ObjectUnprocessable.ts +var ObjectUnprocessable = class extends TypesenseError { +}; + +// src/Typesense/Errors/RequestMalformed.ts +var RequestMalformed = class extends TypesenseError { +}; + +// src/Typesense/Errors/RequestUnauthorized.ts +var RequestUnauthorized = class extends TypesenseError { +}; + +// src/Typesense/Errors/ServerError.ts +var ServerError = class extends TypesenseError { +}; + +// src/Typesense/Errors/ImportError.ts +var ImportError = class extends TypesenseError { + constructor(message, importResults, payload) { + super(message); + this.importResults = importResults; + this.payload = payload; + } +}; + +// src/Typesense/Configuration.ts +var Configuration = class { + constructor(options) { + this.nodes = options.nodes || []; + this.nodes = this.nodes.map((node) => this.setDefaultPathInNode(node)).map((node) => this.setDefaultPortInNode(node)).map((node) => ({ ...node })); + if (options.randomizeNodes == null) { + options.randomizeNodes = true; + } + if (options.randomizeNodes === true) { + this.shuffleArray(this.nodes); + } + this.nearestNode = options.nearestNode; + this.nearestNode = this.setDefaultPathInNode(this.nearestNode); + this.nearestNode = this.setDefaultPortInNode(this.nearestNode); + this.connectionTimeoutSeconds = options.connectionTimeoutSeconds || options.timeoutSeconds || 5; + this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60; + this.numRetries = (options.numRetries !== void 0 && options.numRetries >= 0 ? options.numRetries : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; + this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1; + this.apiKey = options.apiKey; + this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; + this.cacheSearchResultsForSeconds = options.cacheSearchResultsForSeconds || 0; + this.useServerSideSearchCache = options.useServerSideSearchCache || false; + this.axiosAdapter = options.axiosAdapter; + this.logger = options.logger || logger; + this.logLevel = options.logLevel || "warn"; + this.logger.setLevel(this.logLevel); + this.additionalHeaders = options.additionalHeaders; + this.httpAgent = options.httpAgent; + this.httpsAgent = options.httpsAgent; + this.paramsSerializer = options.paramsSerializer; + this.showDeprecationWarnings(options); + this.validate(); + } + validate() { + if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) { + throw new MissingConfigurationError( + "Ensure that nodes[].protocol, nodes[].host and nodes[].port are set" + ); + } + if (this.nearestNode != null && this.isNodeMissingAnyParameters(this.nearestNode)) { + throw new MissingConfigurationError( + "Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set" + ); + } + if (this.apiKey == null) { + throw new MissingConfigurationError("Ensure that apiKey is set"); + } + return true; + } + validateNodes() { + return this.nodes.some((node) => { + return this.isNodeMissingAnyParameters(node); + }); + } + isNodeMissingAnyParameters(node) { + return !["protocol", "host", "port", "path"].every((key) => { + return node.hasOwnProperty(key); + }) && node["url"] == null; + } + setDefaultPathInNode(node) { + if (node != null && !node.hasOwnProperty("path")) { + node["path"] = ""; + } + return node; + } + setDefaultPortInNode(node) { + if (node != null && !node.hasOwnProperty("port") && node.hasOwnProperty("protocol")) { + switch (node["protocol"]) { + case "https": + node["port"] = 443; + break; + case "http": + node["port"] = 80; + break; + } + } + return node; + } + showDeprecationWarnings(options) { + if (options.timeoutSeconds) { + this.logger.warn( + "Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds" + ); + } + if (options.masterNode) { + this.logger.warn( + "Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12" + ); + } + if (options.readReplicaNodes) { + this.logger.warn( + "Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12" + ); + } + } + shuffleArray(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } + } +}; + +// src/Typesense/ApiCall.ts +var import_http = __toESM(require_http()); +var import_https = __toESM(require_https()); +import axios from "axios"; +var APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; +var HEALTHY = true; +var UNHEALTHY = false; +var isNodeJSEnvironment = typeof process !== "undefined" && process.versions != null && process.versions.node != null; +var ApiCall = class { + constructor(configuration) { + this.configuration = configuration; + this.apiKey = this.configuration.apiKey; + this.nodes = this.configuration.nodes == null ? this.configuration.nodes : JSON.parse(JSON.stringify(this.configuration.nodes)); + this.nearestNode = this.configuration.nearestNode == null ? this.configuration.nearestNode : JSON.parse(JSON.stringify(this.configuration.nearestNode)); + this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds; + this.healthcheckIntervalSeconds = this.configuration.healthcheckIntervalSeconds; + this.numRetriesPerRequest = this.configuration.numRetries; + this.retryIntervalSeconds = this.configuration.retryIntervalSeconds; + this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam; + this.additionalUserHeaders = this.configuration.additionalHeaders; + this.logger = this.configuration.logger; + this.initializeMetadataForNodes(); + this.currentNodeIndex = -1; + } + async get(endpoint, queryParameters = {}, { + abortSignal = null, + responseType = void 0 + } = {}) { + return this.performRequest("get", endpoint, { + queryParameters, + abortSignal, + responseType + }); + } + async delete(endpoint, queryParameters = {}) { + return this.performRequest("delete", endpoint, { queryParameters }); + } + async post(endpoint, bodyParameters = {}, queryParameters = {}, additionalHeaders = {}) { + return this.performRequest("post", endpoint, { + queryParameters, + bodyParameters, + additionalHeaders + }); + } + async put(endpoint, bodyParameters = {}, queryParameters = {}) { + return this.performRequest("put", endpoint, { + queryParameters, + bodyParameters + }); + } + async patch(endpoint, bodyParameters = {}, queryParameters = {}) { + return this.performRequest("patch", endpoint, { + queryParameters, + bodyParameters + }); + } + getAdapter() { + if (!this.configuration.axiosAdapter) return void 0; + if (typeof this.configuration.axiosAdapter === "function") + return this.configuration.axiosAdapter; + const isCloudflareWorkers = typeof navigator !== "undefined" && navigator.userAgent === "Cloudflare-Workers"; + return isCloudflareWorkers ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis) : axios.getAdapter(this.configuration.axiosAdapter); + } + async performRequest(requestType, endpoint, { + queryParameters = null, + bodyParameters = null, + additionalHeaders = {}, + abortSignal = null, + responseType = void 0, + skipConnectionTimeout = false, + enableKeepAlive = void 0 + }) { + this.configuration.validate(); + const requestNumber = Date.now(); + let lastException; + let wasAborted = false; + this.logger.debug( + `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}` + ); + for (let numTries = 1; numTries <= this.numRetriesPerRequest + 1; numTries++) { + const node = this.getNextNode(requestNumber); + this.logger.debug( + `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${node.index}` + ); + if (abortSignal && abortSignal.aborted) { + return Promise.reject(new Error("Request aborted by caller.")); + } + let abortListener; + try { + const requestOptions = { + adapter: this.getAdapter(), + method: requestType, + url: this.uriFor(endpoint, node), + headers: Object.assign( + {}, + this.defaultHeaders(), + additionalHeaders, + this.additionalUserHeaders + ), + maxContentLength: Infinity, + maxBodyLength: Infinity, + responseType, + validateStatus: (status) => { + return status > 0; + }, + transformResponse: [ + (data, headers) => { + let transformedData = data; + if (headers !== void 0 && typeof data === "string" && headers["content-type"] && headers["content-type"].startsWith("application/json")) { + transformedData = JSON.parse(data); + } + return transformedData; + } + ] + }; + if (skipConnectionTimeout !== true) { + requestOptions.timeout = this.connectionTimeoutSeconds * 1e3; + } + if (queryParameters && Object.keys(queryParameters).length !== 0) { + requestOptions.params = queryParameters; + } + if (this.sendApiKeyAsQueryParam) { + requestOptions.params = requestOptions.params || {}; + requestOptions.params["x-typesense-api-key"] = this.apiKey; + } + if (this.configuration.httpAgent) { + this.logger.debug( + `Request #${requestNumber}: Using custom httpAgent` + ); + requestOptions.httpAgent = this.configuration.httpAgent; + } else if (enableKeepAlive === true) { + if (!isNodeJSEnvironment) { + this.logger.warn( + `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive` + ); + } else { + this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`); + requestOptions.httpAgent = new import_http.Agent({ keepAlive: true }); + } + } + if (this.configuration.httpsAgent) { + this.logger.debug( + `Request #${requestNumber}: Using custom httpsAgent` + ); + requestOptions.httpsAgent = this.configuration.httpsAgent; + } else if (enableKeepAlive === true) { + if (!isNodeJSEnvironment) { + this.logger.warn( + `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive` + ); + } else { + this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`); + requestOptions.httpsAgent = new import_https.Agent({ keepAlive: true }); + } + } + if (this.configuration.paramsSerializer) { + this.logger.debug( + `Request #${requestNumber}: Using custom paramsSerializer` + ); + requestOptions.paramsSerializer = this.configuration.paramsSerializer; + } + if (bodyParameters && (typeof bodyParameters === "string" && bodyParameters.length !== 0 || typeof bodyParameters === "object" && Object.keys(bodyParameters).length !== 0)) { + requestOptions.data = bodyParameters; + } + if (abortSignal) { + const cancelToken = axios.CancelToken; + const source = cancelToken.source(); + abortListener = () => { + wasAborted = true; + source.cancel(); + }; + abortSignal.addEventListener("abort", abortListener); + requestOptions.cancelToken = source.token; + } + const response = await axios(requestOptions); + if (response.status >= 1 && response.status <= 499) { + this.setNodeHealthcheck(node, HEALTHY); + } + this.logger.debug( + `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.` + ); + if (response.status >= 200 && response.status < 300) { + return Promise.resolve(response.data); + } else if (response.status < 500) { + return Promise.reject( + this.customErrorForResponse( + response, + response.data?.message, + requestOptions.data + ) + ); + } else { + throw this.customErrorForResponse( + response, + response.data?.message, + requestOptions.data + ); + } + } catch (error) { + if (!wasAborted) { + this.setNodeHealthcheck(node, UNHEALTHY); + } + lastException = error; + this.logger.warn( + `Request #${requestNumber}: Request to Node ${node.index} failed due to "${error?.code ?? ""} ${error.message}${error.response == null ? "" : " - " + JSON.stringify(error.response?.data)}"` + ); + if (wasAborted) { + return Promise.reject(new Error("Request aborted by caller.")); + } + if (numTries < this.numRetriesPerRequest + 1) { + this.logger.warn( + `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...` + ); + } + await this.timer(this.retryIntervalSeconds); + } finally { + if (abortSignal && abortListener) { + abortSignal.removeEventListener("abort", abortListener); + } + } + } + this.logger.debug( + `Request #${requestNumber}: No retries left. Raising last error` + ); + return Promise.reject(lastException); + } + // Attempts to find the next healthy node, looping through the list of nodes once. + // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy + // so we can try the request for good measure, in case that node has become healthy since + getNextNode(requestNumber = 0) { + if (this.nearestNode != null) { + this.logger.debug( + `Request #${requestNumber}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy === true ? "Healthy" : "Unhealthy"}` + ); + if (this.nearestNode.isHealthy === true || this.nodeDueForHealthcheck(this.nearestNode, requestNumber)) { + this.logger.debug( + `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}` + ); + return this.nearestNode; + } + this.logger.debug( + `Request #${requestNumber}: Falling back to individual nodes` + ); + } + this.logger.debug( + `Request #${requestNumber}: Nodes Health: ${this.nodes.map( + (node) => `Node ${node.index} is ${node.isHealthy === true ? "Healthy" : "Unhealthy"}` + ).join(" || ")}` + ); + let candidateNode = this.nodes[0]; + for (let i = 0; i <= this.nodes.length; i++) { + this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length; + candidateNode = this.nodes[this.currentNodeIndex]; + if (candidateNode.isHealthy === true || this.nodeDueForHealthcheck(candidateNode, requestNumber)) { + this.logger.debug( + `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}` + ); + return candidateNode; + } + } + this.logger.debug( + `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}` + ); + return candidateNode; + } + nodeDueForHealthcheck(node, requestNumber = 0) { + const isDueForHealthcheck = Date.now() - node.lastAccessTimestamp > this.healthcheckIntervalSeconds * 1e3; + if (isDueForHealthcheck) { + this.logger.debug( + `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.` + ); + } + return isDueForHealthcheck; + } + initializeMetadataForNodes() { + if (this.nearestNode != null) { + this.nearestNode.index = "nearestNode"; + this.setNodeHealthcheck(this.nearestNode, HEALTHY); + } + this.nodes.forEach((node, i) => { + node.index = i; + this.setNodeHealthcheck(node, HEALTHY); + }); + } + setNodeHealthcheck(node, isHealthy) { + node.isHealthy = isHealthy; + node.lastAccessTimestamp = Date.now(); + } + uriFor(endpoint, node) { + if (node.url != null) { + return `${node.url}${endpoint}`; + } + return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`; + } + defaultHeaders() { + const defaultHeaders = {}; + if (!this.sendApiKeyAsQueryParam) { + defaultHeaders[APIKEYHEADERNAME] = this.apiKey; + } + defaultHeaders["Content-Type"] = "application/json"; + return defaultHeaders; + } + async timer(seconds) { + return new Promise((resolve) => setTimeout(resolve, seconds * 1e3)); + } + customErrorForResponse(response, messageFromServer, httpBody) { + let errorMessage = `Request failed with HTTP code ${response.status}`; + if (typeof messageFromServer === "string" && messageFromServer.trim() !== "") { + errorMessage += ` | Server said: ${messageFromServer}`; + } + let error = new TypesenseError(errorMessage, httpBody, response.status); + if (response.status === 400) { + error = new RequestMalformed(errorMessage); + } else if (response.status === 401) { + error = new RequestUnauthorized(errorMessage); + } else if (response.status === 404) { + error = new ObjectNotFound(errorMessage); + } else if (response.status === 409) { + error = new ObjectAlreadyExists(errorMessage); + } else if (response.status === 422) { + error = new ObjectUnprocessable(errorMessage); + } else if (response.status >= 500 && response.status <= 599) { + error = new ServerError(errorMessage); + } else { + error = new HTTPError(errorMessage); + } + return error; + } +}; + +// src/Typesense/RequestWithCache.ts +var defaultCacheResponseForSeconds = 2 * 60; +var defaultMaxSize = 100; +var RequestWithCache = class { + constructor() { + this.responseCache = /* @__PURE__ */ new Map(); + this.responsePromiseCache = /* @__PURE__ */ new Map(); + } + clearCache() { + this.responseCache = /* @__PURE__ */ new Map(); + this.responsePromiseCache = /* @__PURE__ */ new Map(); + } + // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way + async perform(requestContext, requestFunction, requestFunctionArguments, cacheOptions) { + const { + cacheResponseForSeconds = defaultCacheResponseForSeconds, + maxSize = defaultMaxSize + } = cacheOptions; + const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0; + if (isCacheDisabled) { + return requestFunction.call(requestContext, ...requestFunctionArguments); + } + const requestFunctionArgumentsJSON = JSON.stringify( + requestFunctionArguments + ); + const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON); + const now = Date.now(); + if (cacheEntry) { + const isEntryValid = now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1e3; + if (isEntryValid) { + this.responseCache.delete(requestFunctionArgumentsJSON); + this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry); + return Promise.resolve(cacheEntry.response); + } else { + this.responseCache.delete(requestFunctionArgumentsJSON); + } + } + const cachePromiseEntry = this.responsePromiseCache.get( + requestFunctionArgumentsJSON + ); + if (cachePromiseEntry) { + const isEntryValid = now - cachePromiseEntry.requestTimestamp < cacheResponseForSeconds * 1e3; + if (isEntryValid) { + this.responsePromiseCache.delete(requestFunctionArgumentsJSON); + this.responsePromiseCache.set( + requestFunctionArgumentsJSON, + cachePromiseEntry + ); + return cachePromiseEntry.responsePromise; + } else { + this.responsePromiseCache.delete(requestFunctionArgumentsJSON); + } + } + const responsePromise = requestFunction.call( + requestContext, + ...requestFunctionArguments + ); + this.responsePromiseCache.set(requestFunctionArgumentsJSON, { + requestTimestamp: now, + responsePromise + }); + const response = await responsePromise; + this.responseCache.set(requestFunctionArgumentsJSON, { + requestTimestamp: now, + response + }); + const isCacheOverMaxSize = this.responseCache.size > maxSize; + if (isCacheOverMaxSize) { + const oldestEntry = this.responseCache.keys().next().value; + if (oldestEntry) { + this.responseCache.delete(oldestEntry); + } + } + const isResponsePromiseCacheOverMaxSize = this.responsePromiseCache.size > maxSize; + if (isResponsePromiseCacheOverMaxSize) { + const oldestEntry = this.responsePromiseCache.keys().next().value; + if (oldestEntry) { + this.responsePromiseCache.delete(oldestEntry); + } + } + return response; + } +}; + +// src/Typesense/Collections.ts +var RESOURCEPATH = "/collections"; +var Collections = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async create(schema, options = {}) { + return this.apiCall.post(RESOURCEPATH, schema, options); + } + async retrieve(options = {}) { + return this.apiCall.get(RESOURCEPATH, options); + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +}; + +// src/Typesense/SearchOnlyDocuments.ts +var RESOURCEPATH2 = "/documents"; +var SearchOnlyDocuments = class { + constructor(collectionName, apiCall, configuration) { + this.collectionName = collectionName; + this.apiCall = apiCall; + this.configuration = configuration; + this.requestWithCache = new RequestWithCache(); + } + clearCache() { + this.requestWithCache.clearCache(); + } + async search(searchParameters, { + cacheSearchResultsForSeconds = this.configuration.cacheSearchResultsForSeconds, + abortSignal = null + } = {}) { + const additionalQueryParams = {}; + if (this.configuration.useServerSideSearchCache === true) { + additionalQueryParams["use_cache"] = true; + } + const normalizedParams = normalizeArrayableParams(searchParameters); + const queryParams = Object.assign( + {}, + additionalQueryParams, + normalizedParams + ); + return this.requestWithCache.perform( + this.apiCall, + this.apiCall.get, + [this.endpointPath("search"), queryParams, { abortSignal }], + { + cacheResponseForSeconds: cacheSearchResultsForSeconds + } + ); + } + endpointPath(operation) { + return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH2}${operation === void 0 ? "" : "/" + operation}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH2; + } +}; + +// src/Typesense/Documents.ts +var arrayableParams = { + query_by: "query_by", + query_by_weights: "query_by_weights", + facet_by: "facet_by", + group_by: "group_by", + include_fields: "include_fields", + exclude_fields: "exclude_fields", + highlight_fields: "highlight_fields", + highlight_full_fields: "highlight_full_fields", + pinned_hits: "pinned_hits", + hidden_hits: "hidden_hits", + infix: "infix", + override_tags: "override_tags", + num_typos: "num_typos", + prefix: "prefix", + sort_by: "sort_by" +}; +var isNodeJSEnvironment2 = typeof process !== "undefined" && process.versions != null && process.versions.node != null; +var Documents = class extends SearchOnlyDocuments { + constructor(collectionName, apiCall, configuration) { + super(collectionName, apiCall, configuration); + } + async create(document, options = {}) { + if (!document) throw new Error("No document provided"); + return this.apiCall.post(this.endpointPath(), document, options); + } + async upsert(document, options = {}) { + if (!document) throw new Error("No document provided"); + return this.apiCall.post( + this.endpointPath(), + document, + Object.assign({}, options, { action: "upsert" }) + ); + } + async update(document, options = {}) { + if (!document) throw new Error("No document provided"); + if (options["filter_by"] != null) { + return this.apiCall.patch( + this.endpointPath(), + document, + Object.assign({}, options) + ); + } else { + return this.apiCall.post( + this.endpointPath(), + document, + Object.assign({}, options, { action: "update" }) + ); + } + } + async delete(query = {}) { + return this.apiCall.delete(this.endpointPath(), query); + } + async createMany(documents, options = {}) { + this.configuration.logger.warn( + "createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents" + ); + return this.import(documents, options); + } + async import(documents, options = {}) { + let documentsInJSONLFormat; + if (Array.isArray(documents)) { + try { + documentsInJSONLFormat = documents.map((document) => JSON.stringify(document)).join("\n"); + } catch (error) { + if (error instanceof RangeError && error.message.includes("Too many properties to enumerate")) { + throw new Error(`${error} + It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object + + Please try reducing the number of keys in your document, or using CURL to import your data. + `); + } + throw new Error(error); + } + } else { + documentsInJSONLFormat = documents; + } + const resultsInJSONLFormat = await this.apiCall.performRequest( + "post", + this.endpointPath("import"), + { + queryParameters: options, + bodyParameters: documentsInJSONLFormat, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, + // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully + enableKeepAlive: isNodeJSEnvironment2 ? true : false + // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 + } + ); + if (Array.isArray(documents)) { + const resultsInJSONFormat = resultsInJSONLFormat.split("\n").map((r) => JSON.parse(r)); + const failedItems = resultsInJSONFormat.filter( + (r) => r.success === false + ); + if (failedItems.length > 0) { + throw new ImportError( + `${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, + resultsInJSONFormat, + { + documentsInJSONLFormat, + options, + failedItems, + successCount: resultsInJSONFormat.length - failedItems.length + } + ); + } else { + return resultsInJSONFormat; + } + } else { + return resultsInJSONLFormat; + } + } + /** + * Imports documents from a NodeJS readable stream of JSONL. + */ + async importStream(readableStream, options = {}) { + const resultsInJSONLFormat = await this.apiCall.performRequest( + "post", + this.endpointPath("import"), + { + queryParameters: options, + bodyParameters: readableStream, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, + // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully + enableKeepAlive: isNodeJSEnvironment2 ? true : false + // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 + } + ); + const resultsInJSONFormat = resultsInJSONLFormat.split("\n").map((r) => JSON.parse(r)); + const failedItems = resultsInJSONFormat.filter((r) => r.success === false); + if (failedItems.length > 0) { + throw new ImportError( + `${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, + resultsInJSONFormat, + { + documentsInJSONLFormat: readableStream, + options, + failedItems, + successCount: resultsInJSONFormat.length - failedItems.length + } + ); + } else { + return resultsInJSONFormat; + } + } + /** + * Returns a JSONL string for all the documents in this collection + */ + async export(options = {}) { + return this.apiCall.get(this.endpointPath("export"), options); + } + /** + * Returns a NodeJS readable stream of JSONL for all the documents in this collection. + */ + async exportStream(options = {}) { + return this.apiCall.get(this.endpointPath("export"), options, { + responseType: "stream" + }); + } +}; + +// src/Typesense/Utils.ts +function hasNoArrayValues(params) { + return Object.keys(arrayableParams).filter((key) => params[key] !== void 0).every((key) => isNonArrayValue(params[key])); +} +function normalizeArrayableParams(params) { + const result = { ...params }; + const transformedValues = Object.keys(arrayableParams).filter((key) => Array.isArray(result[key])).map((key) => { + result[key] = result[key].join(","); + return key; + }); + if (!transformedValues.length && hasNoArrayValues(result)) { + return result; + } + if (!hasNoArrayValues(result)) { + throw new Error( + `Failed to normalize arrayable params: ${JSON.stringify(result)}` + ); + } + return result; +} +function isNonArrayValue(value) { + return !Array.isArray(value); +} + +// src/Typesense/MultiSearch.ts +var RESOURCEPATH3 = "/multi_search"; +var MultiSearch = class { + constructor(apiCall, configuration, useTextContentType = false) { + this.apiCall = apiCall; + this.configuration = configuration; + this.useTextContentType = useTextContentType; + this.requestWithCache = new RequestWithCache(); + } + clearCache() { + this.requestWithCache.clearCache(); + } + async perform(searchRequests, commonParams = {}, { + cacheSearchResultsForSeconds = this.configuration.cacheSearchResultsForSeconds + } = {}) { + const additionalHeaders = {}; + if (this.useTextContentType) { + additionalHeaders["content-type"] = "text/plain"; + } + const additionalQueryParams = {}; + if (this.configuration.useServerSideSearchCache === true) { + additionalQueryParams["use_cache"] = true; + } + const queryParams = { ...commonParams, ...additionalQueryParams }; + const normalizedSearchRequests = { + searches: searchRequests.searches.map(normalizeArrayableParams) + }; + const normalizedQueryParams = normalizeArrayableParams(queryParams); + return this.requestWithCache.perform( + this.apiCall, + this.apiCall.post, + [ + RESOURCEPATH3, + normalizedSearchRequests, + normalizedQueryParams, + additionalHeaders + ], + { cacheResponseForSeconds: cacheSearchResultsForSeconds } + ); + } +}; + +// src/Typesense/SearchOnlyCollection.ts +var SearchOnlyCollection = class { + constructor(name, apiCall, configuration) { + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this._documents = new SearchOnlyDocuments( + this.name, + this.apiCall, + this.configuration + ); + } + documents() { + return this._documents; + } +}; + +// src/Typesense/SearchClient.ts +var SearchClient = class { + constructor(options) { + options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true; + if (options.sendApiKeyAsQueryParam === true && (options.apiKey || "").length > 2e3) { + console.warn( + "[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter." + ); + options.sendApiKeyAsQueryParam = false; + } + this.configuration = new Configuration(options); + this.apiCall = new ApiCall(this.configuration); + this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true); + this.individualCollections = {}; + } + clearCache() { + this.multiSearch.clearCache(); + Object.entries(this.individualCollections).forEach(([_, collection]) => { + collection.documents().clearCache(); + }); + } + collections(collectionName) { + if (!collectionName) { + throw new Error( + "Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object." + ); + } else { + if (this.individualCollections[collectionName] === void 0) { + this.individualCollections[collectionName] = new SearchOnlyCollection( + collectionName, + this.apiCall, + this.configuration + ); + } + return this.individualCollections[collectionName]; + } + } +}; + +// src/Typesense/Overrides.ts +var RESOURCEPATH4 = "/overrides"; +var Overrides = class _Overrides { + constructor(collectionName, apiCall) { + this.collectionName = collectionName; + this.apiCall = apiCall; + } + async upsert(overrideId, params) { + return this.apiCall.put( + this.endpointPath(overrideId), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${Collections.RESOURCEPATH}/${this.collectionName}${_Overrides.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH4; + } +}; + +// src/Typesense/Override.ts +var Override = class { + constructor(collectionName, overrideId, apiCall) { + this.collectionName = collectionName; + this.overrideId = overrideId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`; + } +}; + +// src/Typesense/Synonyms.ts +var RESOURCEPATH5 = "/synonyms"; +var Synonyms = class _Synonyms { + constructor(collectionName, apiCall) { + this.collectionName = collectionName; + this.apiCall = apiCall; + } + async upsert(synonymId, params) { + return this.apiCall.put( + this.endpointPath(synonymId), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${_Synonyms.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH5; + } +}; + +// src/Typesense/Synonym.ts +var Synonym = class { + constructor(collectionName, synonymId, apiCall) { + this.collectionName = collectionName; + this.synonymId = synonymId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`; + } +}; + +// src/Typesense/Document.ts +var Document = class { + constructor(collectionName, documentId, apiCall) { + this.collectionName = collectionName; + this.documentId = documentId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete(options) { + return this.apiCall.delete(this.endpointPath(), options); + } + async update(partialDocument, options = {}) { + return this.apiCall.patch(this.endpointPath(), partialDocument, options); + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`; + } +}; + +// src/Typesense/Collection.ts +var Collection = class { + constructor(name, apiCall, configuration) { + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this.individualDocuments = {}; + this.individualOverrides = {}; + this.individualSynonyms = {}; + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this._documents = new Documents( + this.name, + this.apiCall, + this.configuration + ); + this._overrides = new Overrides(this.name, this.apiCall); + this._synonyms = new Synonyms(this.name, this.apiCall); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async update(schema) { + return this.apiCall.patch(this.endpointPath(), schema); + } + async delete(options = {}) { + return this.apiCall.delete(this.endpointPath(), options); + } + async exists() { + try { + await this.retrieve(); + return true; + } catch (e) { + if (e instanceof ObjectNotFound) return false; + throw e; + } + } + documents(documentId) { + if (!documentId) { + return this._documents; + } else { + if (this.individualDocuments[documentId] === void 0) { + this.individualDocuments[documentId] = new Document( + this.name, + documentId, + this.apiCall + ); + } + return this.individualDocuments[documentId]; + } + } + overrides(overrideId) { + if (overrideId === void 0) { + return this._overrides; + } else { + if (this.individualOverrides[overrideId] === void 0) { + this.individualOverrides[overrideId] = new Override( + this.name, + overrideId, + this.apiCall + ); + } + return this.individualOverrides[overrideId]; + } + } + synonyms(synonymId) { + if (synonymId === void 0) { + return this._synonyms; + } else { + if (this.individualSynonyms[synonymId] === void 0) { + this.individualSynonyms[synonymId] = new Synonym( + this.name, + synonymId, + this.apiCall + ); + } + return this.individualSynonyms[synonymId]; + } + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +}; + +// src/Typesense/Aliases.ts +var RESOURCEPATH6 = "/aliases"; +var Aliases = class _Aliases { + constructor(apiCall) { + this.apiCall = apiCall; + } + async upsert(name, mapping) { + return this.apiCall.put( + this.endpointPath(name), + mapping + ); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH6); + } + endpointPath(aliasName) { + return `${_Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH6; + } +}; + +// src/Typesense/Alias.ts +var Alias = class { + constructor(name, apiCall) { + this.name = name; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +}; + +// src/Typesense/Keys.ts +var import_crypto = __toESM(require_crypto()); +var RESOURCEPATH7 = "/keys"; +var Keys = class _Keys { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async create(params) { + return this.apiCall.post(_Keys.RESOURCEPATH, params); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH7); + } + generateScopedSearchKey(searchKey, parameters) { + const normalizedParams = normalizeArrayableParams(parameters); + const paramsJSON = JSON.stringify(normalizedParams); + const digest = Buffer.from( + (0, import_crypto.createHmac)("sha256", searchKey).update(paramsJSON).digest("base64") + ); + const keyPrefix = searchKey.substr(0, 4); + const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`; + return Buffer.from(rawScopedKey).toString("base64"); + } + static get RESOURCEPATH() { + return RESOURCEPATH7; + } +}; + +// src/Typesense/Key.ts +var Key = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/Debug.ts +var RESOURCEPATH8 = "/debug"; +var Debug = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH8); + } +}; + +// src/Typesense/Metrics.ts +var RESOURCEPATH9 = "/metrics.json"; +var Metrics = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH9); + } +}; + +// src/Typesense/Stats.ts +var RESOURCEPATH10 = "/stats.json"; +var Metrics2 = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH10); + } +}; + +// src/Typesense/Health.ts +var RESOURCEPATH11 = "/health"; +var Health = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH11); + } +}; + +// src/Typesense/Operations.ts +var RESOURCEPATH12 = "/operations"; +var Operations = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async perform(operationName, queryParameters = {}) { + return this.apiCall.post( + `${RESOURCEPATH12}/${operationName}`, + {}, + queryParameters + ); + } +}; + +// src/Typesense/Presets.ts +var RESOURCEPATH13 = "/presets"; +var Presets = class _Presets { + constructor(apiCall) { + this.apiCall = apiCall; + } + async upsert(presetId, params) { + if (typeof params.value === "object" && "searches" in params.value) { + const normalizedParams2 = params.value.searches.map( + (search) => normalizeArrayableParams(search) + ); + return this.apiCall.put(this.endpointPath(presetId), { + value: { searches: normalizedParams2 } + }); + } + const normalizedParams = normalizeArrayableParams(params.value); + return this.apiCall.put(this.endpointPath(presetId), { + value: normalizedParams + }); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${_Presets.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH13; + } +}; + +// src/Typesense/Preset.ts +var Preset = class { + constructor(presetId, apiCall) { + this.presetId = presetId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`; + } +}; + +// src/Typesense/AnalyticsRules.ts +var RESOURCEPATH14 = "/analytics/rules"; +var AnalyticsRules = class _AnalyticsRules { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async upsert(name, params) { + return this.apiCall.put( + this.endpointPath(name), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${_AnalyticsRules.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH14; + } +}; + +// src/Typesense/AnalyticsRule.ts +var AnalyticsRule = class { + constructor(name, apiCall) { + this.name = name; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +}; + +// src/Typesense/AnalyticsEvents.ts +var RESOURCEPATH15 = "/analytics/events"; +var AnalyticsEvents = class _AnalyticsEvents { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async create(params) { + return this.apiCall.post( + this.endpointPath(), + params + ); + } + endpointPath(operation) { + return `${_AnalyticsEvents.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH15; + } +}; + +// src/Typesense/Analytics.ts +var RESOURCEPATH16 = "/analytics"; +var Analytics = class { + constructor(apiCall) { + this.apiCall = apiCall; + this.individualAnalyticsRules = {}; + this.apiCall = apiCall; + this._analyticsRules = new AnalyticsRules(this.apiCall); + this._analyticsEvents = new AnalyticsEvents(this.apiCall); + } + rules(id) { + if (id === void 0) { + return this._analyticsRules; + } else { + if (this.individualAnalyticsRules[id] === void 0) { + this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall); + } + return this.individualAnalyticsRules[id]; + } + } + events() { + return this._analyticsEvents; + } + static get RESOURCEPATH() { + return RESOURCEPATH16; + } +}; + +// src/Typesense/Stopwords.ts +var RESOURCEPATH17 = "/stopwords"; +var Stopwords = class _Stopwords { + constructor(apiCall) { + this.apiCall = apiCall; + } + async upsert(stopwordId, params) { + return this.apiCall.put( + this.endpointPath(stopwordId), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${_Stopwords.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH17; + } +}; + +// src/Typesense/Stopword.ts +var Stopword = class { + constructor(stopwordId, apiCall) { + this.stopwordId = stopwordId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`; + } +}; + +// src/Typesense/ConversationModels.ts +var RESOURCEPATH18 = "/conversations/models"; +var ConversationModels = class _ConversationModels { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async create(params) { + return this.apiCall.post( + this.endpointPath(), + params + ); + } + async retrieve() { + return this.apiCall.get( + this.endpointPath() + ); + } + endpointPath(operation) { + return `${_ConversationModels.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH18; + } +}; + +// src/Typesense/ConversationModel.ts +var ConversationModel = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async update(params) { + return this.apiCall.put( + this.endpointPath(), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete( + this.endpointPath() + ); + } + endpointPath() { + return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/Conversations.ts +var RESOURCEPATH19 = "/conversations"; +var Conversations = class { + constructor(apiCall) { + this.apiCall = apiCall; + this.individualConversationModels = {}; + this.apiCall = apiCall; + this._conversationsModels = new ConversationModels(this.apiCall); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH19); + } + models(id) { + if (id === void 0) { + return this._conversationsModels; + } else { + if (this.individualConversationModels[id] === void 0) { + this.individualConversationModels[id] = new ConversationModel( + id, + this.apiCall + ); + } + return this.individualConversationModels[id]; + } + } + static get RESOURCEPATH() { + return RESOURCEPATH19; + } +}; + +// src/Typesense/Conversation.ts +var Conversation = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async update(params) { + return this.apiCall.put( + this.endpointPath(), + params + ); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/StemmingDictionaries.ts +var RESOURCEPATH20 = "/stemming/dictionaries"; +var StemmingDictionaries = class _StemmingDictionaries { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async upsert(id, wordRootCombinations) { + const wordRootCombinationsInJSONLFormat = Array.isArray( + wordRootCombinations + ) ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join("\n") : wordRootCombinations; + const resultsInJSONLFormat = await this.apiCall.performRequest( + "post", + this.endpointPath("import"), + { + queryParameters: { id }, + bodyParameters: wordRootCombinationsInJSONLFormat, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true + } + ); + return Array.isArray(wordRootCombinations) ? resultsInJSONLFormat.split("\n").map((line) => JSON.parse(line)) : resultsInJSONLFormat; + } + async retrieve() { + return this.apiCall.get( + this.endpointPath() + ); + } + endpointPath(operation) { + return operation === void 0 ? `${_StemmingDictionaries.RESOURCEPATH}` : `${_StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH20; + } +}; + +// src/Typesense/StemmingDictionary.ts +var StemmingDictionary = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath() { + return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/Stemming.ts +var RESOURCEPATH21 = "/stemming"; +var Stemming = class { + constructor(apiCall) { + this.apiCall = apiCall; + this.individualStemmingDictionaries = {}; + this.apiCall = apiCall; + this._stemmingDictionaries = new StemmingDictionaries(this.apiCall); + } + dictionaries(id) { + if (id === void 0) { + return this._stemmingDictionaries; + } else { + if (this.individualStemmingDictionaries[id] === void 0) { + this.individualStemmingDictionaries[id] = new StemmingDictionary( + id, + this.apiCall + ); + } + return this.individualStemmingDictionaries[id]; + } + } + static get RESOURCEPATH() { + return RESOURCEPATH21; + } +}; + +// src/Typesense/Client.ts +var Client = class { + constructor(options) { + options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false; + this.configuration = new Configuration(options); + this.apiCall = new ApiCall(this.configuration); + this.debug = new Debug(this.apiCall); + this.metrics = new Metrics(this.apiCall); + this.stats = new Metrics2(this.apiCall); + this.health = new Health(this.apiCall); + this.operations = new Operations(this.apiCall); + this.multiSearch = new MultiSearch(this.apiCall, this.configuration); + this._collections = new Collections(this.apiCall); + this.individualCollections = {}; + this._aliases = new Aliases(this.apiCall); + this.individualAliases = {}; + this._keys = new Keys(this.apiCall); + this.individualKeys = {}; + this._presets = new Presets(this.apiCall); + this.individualPresets = {}; + this._stopwords = new Stopwords(this.apiCall); + this.individualStopwords = {}; + this.analytics = new Analytics(this.apiCall); + this.stemming = new Stemming(this.apiCall); + this._conversations = new Conversations(this.apiCall); + this.individualConversations = {}; + } + collections(collectionName) { + if (collectionName === void 0) { + return this._collections; + } else { + if (this.individualCollections[collectionName] === void 0) { + this.individualCollections[collectionName] = new Collection( + collectionName, + this.apiCall, + this.configuration + ); + } + return this.individualCollections[collectionName]; + } + } + aliases(aliasName) { + if (aliasName === void 0) { + return this._aliases; + } else { + if (this.individualAliases[aliasName] === void 0) { + this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall); + } + return this.individualAliases[aliasName]; + } + } + keys(id) { + if (id === void 0) { + return this._keys; + } else { + if (this.individualKeys[id] === void 0) { + this.individualKeys[id] = new Key(id, this.apiCall); + } + return this.individualKeys[id]; + } + } + presets(id) { + if (id === void 0) { + return this._presets; + } else { + if (this.individualPresets[id] === void 0) { + this.individualPresets[id] = new Preset(id, this.apiCall); + } + return this.individualPresets[id]; + } + } + stopwords(id) { + if (id === void 0) { + return this._stopwords; + } else { + if (this.individualStopwords[id] === void 0) { + this.individualStopwords[id] = new Stopword(id, this.apiCall); + } + return this.individualStopwords[id]; + } + } + conversations(id) { + if (id === void 0) { + return this._conversations; + } else { + if (this.individualConversations[id] === void 0) { + this.individualConversations[id] = new Conversation(id, this.apiCall); + } + return this.individualConversations[id]; + } + } +}; +export { + Client, + Errors_exports as Errors, + SearchClient +}; diff --git a/lib/Typesense.d.mts b/lib/Typesense.d.mts deleted file mode 100644 index 9814771e..00000000 --- a/lib/Typesense.d.mts +++ /dev/null @@ -1,1125 +0,0 @@ -import logger from 'loglevel'; -import { Agent } from 'http'; -import { Agent as Agent$1 } from 'https'; -import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; -import { ReadStream } from 'fs'; -import { ReadStream as ReadStream$1 } from 'node:fs'; - -interface NodeConfiguration { - host: string; - port: number; - protocol: string; - path?: string; - url?: string; -} -interface NodeConfigurationWithHostname { - host: string; - port: number; - protocol: string; - path?: string; -} -interface NodeConfigurationWithUrl { - url: string; -} -interface ConfigurationOptions { - apiKey: string; - nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; - randomizeNodes?: boolean; - /** - * @deprecated - * masterNode is now consolidated to nodes, starting with Typesense Server v0.12' - */ - masterNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; - /** - * @deprecated - * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12' - */ - readReplicaNodes?: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; - nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; - connectionTimeoutSeconds?: number; - timeoutSeconds?: number; - healthcheckIntervalSeconds?: number; - numRetries?: number; - retryIntervalSeconds?: number; - sendApiKeyAsQueryParam?: boolean | undefined; - useServerSideSearchCache?: boolean; - cacheSearchResultsForSeconds?: number; - additionalHeaders?: Record; - logLevel?: logger.LogLevelDesc; - logger?: logger.Logger; - /** - * Set a custom HTTP Agent - * - * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors - * Usage: - * const { Agent: HTTPAgent } = require("http"); - * ... - * httpAgent: new HTTPAgent({ keepAlive: true }), - * @type {HTTPAgent} - */ - httpAgent?: Agent; - /** - * Set a custom HTTPS Agent - * - * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors - * Usage: - * const { Agent: HTTPSAgent } = require("https"); - * ... - * httpsAgent: new HTTPSAgent({ keepAlive: true }), - * @type {HTTPSAgent} - */ - httpsAgent?: Agent$1; - /** - * Set a custom paramsSerializer - * - * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config - * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397 - * @type {any} - */ - paramsSerializer?: any; - /** - * Set a custom axios adapter - * - * Useful for customizing the underlying HTTP client library used by Typesense. - * - * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge. - * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161 - * - * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config - */ - axiosAdapter?: AxiosRequestConfig["adapter"]; -} -declare class Configuration { - readonly nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; - readonly nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; - readonly connectionTimeoutSeconds: number; - readonly healthcheckIntervalSeconds: number; - readonly numRetries: number; - readonly retryIntervalSeconds: number; - readonly apiKey: string; - readonly sendApiKeyAsQueryParam?: boolean; - readonly cacheSearchResultsForSeconds: number; - readonly useServerSideSearchCache: boolean; - readonly logger: logger.Logger; - readonly logLevel: logger.LogLevelDesc; - readonly additionalHeaders?: Record; - readonly httpAgent?: Agent; - readonly httpsAgent?: Agent$1; - readonly paramsSerializer?: any; - readonly axiosAdapter?: AxiosRequestConfig["adapter"]; - constructor(options: ConfigurationOptions); - validate(): boolean; - private validateNodes; - private isNodeMissingAnyParameters; - private setDefaultPathInNode; - private setDefaultPortInNode; - private showDeprecationWarnings; - private shuffleArray; -} - -declare class TypesenseError extends Error { - httpStatus?: number; - httpBody?: string; - constructor(message?: string, httpBody?: string, httpStatus?: number); -} - -interface Node extends NodeConfiguration { - isHealthy: boolean; - index: string | number; -} -declare class ApiCall { - private configuration; - private readonly apiKey; - private readonly nodes; - private readonly nearestNode; - private readonly connectionTimeoutSeconds; - private readonly healthcheckIntervalSeconds; - private readonly retryIntervalSeconds; - private readonly sendApiKeyAsQueryParam?; - private readonly numRetriesPerRequest; - private readonly additionalUserHeaders?; - private readonly logger; - private currentNodeIndex; - constructor(configuration: Configuration); - get(endpoint: string, queryParameters?: any, { abortSignal, responseType, }?: { - abortSignal?: any; - responseType?: AxiosRequestConfig["responseType"] | undefined; - }): Promise; - delete(endpoint: string, queryParameters?: any): Promise; - post(endpoint: string, bodyParameters?: any, queryParameters?: any, additionalHeaders?: any): Promise; - put(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; - patch(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; - private getAdapter; - performRequest(requestType: Method, endpoint: string, { queryParameters, bodyParameters, additionalHeaders, abortSignal, responseType, skipConnectionTimeout, enableKeepAlive, }: { - queryParameters?: any; - bodyParameters?: any; - additionalHeaders?: any; - abortSignal?: any; - responseType?: AxiosRequestConfig["responseType"] | undefined; - skipConnectionTimeout?: boolean; - enableKeepAlive?: boolean | undefined; - }): Promise; - getNextNode(requestNumber?: number): Node; - nodeDueForHealthcheck(node: any, requestNumber?: number): boolean; - initializeMetadataForNodes(): void; - setNodeHealthcheck(node: any, isHealthy: any): void; - uriFor(endpoint: string, node: any): string; - defaultHeaders(): any; - timer(seconds: any): Promise; - customErrorForResponse(response: AxiosResponse, messageFromServer: string, httpBody?: string): TypesenseError; -} - -declare class RequestWithCache { - private responseCache; - private responsePromiseCache; - clearCache(): void; - perform(requestContext: any, requestFunction: (...params: any) => unknown, requestFunctionArguments: any[], cacheOptions: CacheOptions): Promise; -} -interface CacheOptions { - cacheResponseForSeconds?: number; - maxSize?: number; -} - -declare class SearchOnlyDocuments implements SearchableDocuments { - protected collectionName: string; - protected apiCall: ApiCall; - protected configuration: Configuration; - protected requestWithCache: RequestWithCache; - constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); - clearCache(): void; - search(searchParameters: SearchParams | SearchParamsWithPreset, { cacheSearchResultsForSeconds, abortSignal, }?: SearchOptions): Promise>; - protected endpointPath(operation?: string): string; - static get RESOURCEPATH(): string; -} - -interface DeleteQuery { - filter_by?: string; - batch_size?: number; - ignore_not_found?: boolean; -} -interface DeleteResponse { - num_deleted: number; -} -interface ImportResponseSuccess { - success: true; -} -interface ImportResponseFail { - success: false; - error: string; - document: DocumentSchema; - code: number; -} -type ImportResponse = ImportResponseSuccess | ImportResponseFail; -type DocumentSchema = Record; -interface SearchParamsWithPreset extends Partial { - preset: string; -} -type DropTokensMode = "right_to_left" | "left_to_right" | "both_sides:3"; -type OperationMode = "off" | "always" | "fallback"; -type UnionArrayKeys = { - [K in keyof T]: T[K] extends undefined ? never : NonNullable extends infer R ? R extends R[] ? never : R extends (infer U)[] | infer U ? U[] extends R ? K : never : never : never; -}[keyof T] & keyof T; -type UnionArraySearchParams = UnionArrayKeys; -type ArraybleParams = { - readonly [K in UnionArraySearchParams]: string; -}; -type ExtractBaseTypes = { - [K in keyof T]: K extends UnionArrayKeys ? T[K] extends (infer U)[] | infer U ? U : T[K] : T[K]; -}; -declare const arrayableParams: ArraybleParams; -interface SearchParams { - q?: "*" | (string & {}); - query_by?: string | string[]; - query_by_weights?: string | number[]; - prefix?: string | boolean | boolean[]; - filter_by?: string; - enable_synonyms?: boolean; - enable_analytics?: boolean; - filter_curated_hits?: boolean; - enable_lazy_filter?: boolean; - sort_by?: string | string[]; - facet_by?: string | string[]; - max_facet_values?: number; - facet_sample_threshold?: number; - facet_sample_percent?: number; - facet_query?: string; - facet_query_num_typos?: number; - facet_return_parent?: string; - facet_strategy?: "exhaustive" | "top_values" | "automatic"; - page?: number; - per_page?: number; - group_by?: string | string[]; - group_limit?: number; - group_missing_values?: boolean; - include_fields?: string | string[]; - exclude_fields?: string | string[]; - highlight_fields?: string | string[]; - highlight_full_fields?: string | string[]; - highlight_affix_num_tokens?: number; - highlight_start_tag?: string; - highlight_end_tag?: string; - enable_highlight_v1?: boolean; - snippet_threshold?: number; - num_typos?: string | number | number[]; - min_len_1typo?: number; - min_len_2typo?: number; - split_join_tokens?: OperationMode; - exhaustive_search?: boolean; - drop_tokens_threshold?: number; - drop_tokens_mode?: DropTokensMode; - typo_tokens_threshold?: number; - pinned_hits?: string | string[]; - hidden_hits?: string | string[]; - limit_hits?: number; - pre_segmented_query?: boolean; - enable_overrides?: boolean; - override_tags?: string | string[]; - prioritize_exact_match?: boolean; - prioritize_token_position?: boolean; - prioritize_num_matching_fields?: boolean; - search_cutoff_ms?: number; - use_cache?: boolean; - max_candidates?: number; - infix?: OperationMode | OperationMode[]; - preset?: string; - text_match_type?: "max_score" | "max_weight"; - vector_query?: string; - "x-typesense-api-key"?: string; - "x-typesense-user-id"?: string; - offset?: number; - limit?: number; - stopwords?: string; - conversation?: boolean; - conversation_model_id?: string; - conversation_id?: string; - voice_query?: string; -} -type SearchResponseHighlightObject = { - matched_tokens?: string[]; - snippet?: string; - value?: string; -}; -type SearchResponseHighlight = T extends string | number ? SearchResponseHighlightObject : { - [TAttribute in keyof T]?: SearchResponseHighlight; -}; -interface SearchResponseHit { - curated?: true; - highlights?: [ - { - field: keyof T; - snippet?: string; - value?: string; - snippets?: string[]; - indices?: number[]; - matched_tokens: string[][] | string[]; - } - ]; - highlight: SearchResponseHighlight; - document: T; - text_match: number; - text_match_info?: { - best_field_score: `${number}`; - best_field_weight: number; - fields_matched: number; - score: `${number}`; - tokens_matched: number; - }; -} -interface SearchResponseFacetCountSchema { - counts: { - count: number; - highlighted: string; - value: string; - }[]; - field_name: keyof T; - stats: { - avg?: number; - max?: number; - min?: number; - sum?: number; - }; -} -interface SearchResponseRequestParams { - collection_name?: string; - q?: string; - page?: number; - per_page?: number; - first_q?: string; - voice_query?: { - transcribed_query?: string; - }; -} -interface SearchResponse { - facet_counts?: SearchResponseFacetCountSchema[]; - found: number; - found_docs?: number; - out_of: number; - page: number; - request_params: SearchResponseRequestParams; - search_time_ms: number; - search_cutoff?: boolean; - hits?: SearchResponseHit[]; - grouped_hits?: { - group_key: string[]; - hits: SearchResponseHit[]; - found?: number; - }[]; - conversation?: { - answer: string; - conversation_history: { - conversation: object[]; - id: string; - last_updated: number; - ttl: number; - }; - conversation_id: string; - query: string; - }; - error?: string; - code?: number; -} -interface DocumentWriteParameters { - dirty_values?: "coerce_or_reject" | "coerce_or_drop" | "drop" | "reject"; - action?: "create" | "update" | "upsert" | "emplace"; -} -interface UpdateByFilterParameters { - filter_by?: string; -} -interface UpdateByFilterResponse { - num_updated: number; -} -interface DocumentImportParameters extends DocumentWriteParameters { - batch_size?: number; - return_doc?: boolean; - return_id?: boolean; -} -interface DocumentsExportParameters { - filter_by?: string; - include_fields?: string; - exclude_fields?: string; -} -interface SearchableDocuments { - search(searchParameters: SearchParams | SearchParamsWithPreset, options: SearchOptions): Promise>; - clearCache(): void; -} -interface WriteableDocuments { - create(document: T, options: DocumentWriteParameters): Promise; - upsert(document: T, options: DocumentWriteParameters): Promise; - update(document: T, options: DocumentWriteParameters): Promise; - delete(query: DeleteQuery): Promise; - import(documents: T[] | string, options: DocumentWriteParameters): Promise; - export(options: DocumentsExportParameters): Promise; -} -interface SearchOptions { - cacheSearchResultsForSeconds?: number; - abortSignal?: AbortSignal | null; -} -declare class Documents extends SearchOnlyDocuments implements WriteableDocuments { - constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); - create(document: T, options?: DocumentWriteParameters): Promise; - upsert(document: T, options?: DocumentWriteParameters): Promise; - update(document: T, options: UpdateByFilterParameters): Promise; - update(document: T, options: DocumentWriteParameters): Promise; - delete(query?: DeleteQuery): Promise; - createMany(documents: T[], options?: DocumentImportParameters): Promise; - /** - * Import a set of documents in a batch. - * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects. - * @param options - * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results. - */ - import(documents: string, options?: DocumentImportParameters): Promise; - import(documents: T[], options?: DocumentImportParameters): Promise; - /** - * Imports documents from a NodeJS readable stream of JSONL. - */ - importStream(readableStream: ReadStream, options?: DocumentImportParameters): Promise; - /** - * Returns a JSONL string for all the documents in this collection - */ - export(options?: DocumentsExportParameters): Promise; - /** - * Returns a NodeJS readable stream of JSONL for all the documents in this collection. - */ - exportStream(options?: DocumentsExportParameters): Promise; -} - -interface MultiSearchRequestSchema extends SearchParams { - collection?: string; - "x-typesense-api-key"?: string; -} -interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { - collection?: string; - "x-typesense-api-key"?: string; -} -interface MultiSearchRequestsSchema { - searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; -} -interface MultiSearchResponse { - results: { - [Index in keyof T]: SearchResponse; - } & { - length: T["length"]; - }; -} -declare class MultiSearch { - private apiCall; - private configuration; - private useTextContentType; - private requestWithCache; - constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); - clearCache(): void; - perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { - cacheSearchResultsForSeconds?: number; - }): Promise>; -} - -declare class SearchOnlyCollection { - private readonly name; - private readonly apiCall; - private readonly configuration; - private readonly _documents; - constructor(name: string, apiCall: ApiCall, configuration: any); - documents(): SearchableDocuments; -} - -declare class SearchClient { - readonly multiSearch: MultiSearch; - private readonly configuration; - private readonly apiCall; - private readonly individualCollections; - constructor(options: ConfigurationOptions); - clearCache(): void; - collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; -} - -interface OverrideSchema extends OverrideCreateSchema { - id: string; -} -interface OverrideDeleteSchema { - id: string; -} -declare class Override { - private collectionName; - private overrideId; - private apiCall; - constructor(collectionName: string, overrideId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface OverrideRuleQuerySchema { - query?: string; - match?: "exact" | "contains"; -} -interface OverrideRuleFilterSchema { - filter_by?: string; -} -interface OverrideRuleTagsSchema { - tags?: string[]; -} -interface OverrideCreateSchema { - rule: OverrideRuleQuerySchema & OverrideRuleFilterSchema & OverrideRuleTagsSchema; - filter_by?: string; - sort_by?: string; - remove_matched_tokens?: boolean; - replace_query?: string; - includes?: Array<{ - id: string; - position: number; - }>; - excludes?: Array<{ - id: string; - }>; - filter_curated_hits?: boolean; - effective_from_ts?: number; - effective_to_ts?: number; - stop_processing?: boolean; - metadata?: object; -} -interface OverridesRetrieveSchema { - overrides: OverrideSchema[]; -} -declare class Overrides { - private collectionName; - private apiCall; - constructor(collectionName: string, apiCall: ApiCall); - upsert(overrideId: string, params: OverrideCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -interface SynonymSchema extends SynonymCreateSchema { - id: string; -} -interface SynonymDeleteSchema { - id: string; -} -declare class Synonym { - private collectionName; - private synonymId; - private apiCall; - constructor(collectionName: string, synonymId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface SynonymCreateSchema { - synonyms: string[]; - root?: string; - locale?: string; - symbols_to_index?: string[]; -} -interface SynonymsRetrieveSchema { - synonyms: SynonymSchema[]; -} -declare class Synonyms { - private collectionName; - private apiCall; - constructor(collectionName: string, apiCall: ApiCall); - upsert(synonymId: string, params: SynonymCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -declare class Document { - private collectionName; - private documentId; - private apiCall; - constructor(collectionName: string, documentId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(options?: DeleteQuery): Promise; - update(partialDocument: Partial, options?: DocumentWriteParameters): Promise; - private endpointPath; -} - -type FieldType = "string" | "int32" | "int64" | "float" | "bool" | "geopoint" | "geopoint[]" | "string[]" | "int32[]" | "int64[]" | "float[]" | "bool[]" | "object" | "object[]" | "auto" | "string*" | "image"; -interface CollectionFieldSchema { - name: string; - type: FieldType; - optional?: boolean; - facet?: boolean; - index?: boolean; - sort?: boolean; - locale?: string; - infix?: boolean; - stem?: boolean; - num_dim?: number; - store?: boolean; - range_index?: boolean; - [t: string]: unknown; -} -interface CollectionSchema extends CollectionCreateSchema { - created_at: number; - num_documents: number; - num_memory_shards: number; -} -interface CollectionDropFieldSchema { - name: string; - drop: true; -} -interface CollectionUpdateSchema extends Partial> { - fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[]; -} -interface CollectionDeleteOptions { - compact_store?: boolean; -} -declare class Collection { - private readonly name; - private readonly apiCall; - private readonly configuration; - private readonly _documents; - private individualDocuments; - private readonly _overrides; - private individualOverrides; - private readonly _synonyms; - private individualSynonyms; - constructor(name: string, apiCall: ApiCall, configuration: any); - retrieve(): Promise; - update(schema: CollectionUpdateSchema): Promise; - delete(options?: CollectionDeleteOptions): Promise; - exists(): Promise; - documents(): Documents; - documents(documentId: string): Document; - overrides(): Overrides; - overrides(overrideId: string): Override; - synonyms(): Synonyms; - synonyms(synonymId: string): Synonym; - private endpointPath; -} - -interface CollectionCreateSchema { - name: string; - default_sorting_field?: string; - fields?: CollectionFieldSchema[]; - symbols_to_index?: string[]; - token_separators?: string[]; - enable_nested_fields?: boolean; - metadata?: object; - voice_query_model?: { - model_name?: string; - }; -} -interface CollectionCreateOptions { - src_name?: string; -} -interface CollectionsRetrieveOptions { - exclude_fields?: string; -} -declare class Collections { - private apiCall; - constructor(apiCall: ApiCall); - create(schema: CollectionCreateSchema, options?: CollectionCreateOptions): Promise; - retrieve(options?: CollectionsRetrieveOptions): Promise; - static get RESOURCEPATH(): string; -} - -interface CollectionAliasCreateSchema { - collection_name: string; -} -interface CollectionAliasSchema extends CollectionAliasCreateSchema { - name: string; -} -interface CollectionAliasesResponseSchema { - aliases: CollectionAliasSchema[]; -} -declare class Aliases { - private apiCall; - constructor(apiCall: ApiCall); - upsert(name: string, mapping: CollectionAliasCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -declare class Alias { - private name; - private apiCall; - constructor(name: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface KeyCreateSchema { - actions: string[]; - collections: string[]; - description?: string; - value?: string; - value_prefix?: string; - expires_at?: number; - autodelete?: boolean; -} -interface KeyDeleteSchema { - id: number; -} -interface KeySchema extends KeyCreateSchema { - id: number; -} -declare class Key { - private id; - private apiCall; - constructor(id: number, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface KeysRetrieveSchema { - keys: KeySchema[]; -} -interface GenerateScopedSearchKeyParams extends Partial { - expires_at?: number; - cache_ttl?: number; - limit_multi_searches?: number; -} -declare class Keys { - private apiCall; - constructor(apiCall: ApiCall); - create(params: KeyCreateSchema): Promise; - retrieve(): Promise; - generateScopedSearchKey(searchKey: string, parameters: GenerateScopedSearchKeyParams): string; - static get RESOURCEPATH(): string; -} - -interface DebugResponseSchema { - state: number; - version: string; -} -declare class Debug { - private apiCall; - constructor(apiCall: ApiCall); - retrieve(): Promise; -} - -interface MetricsResponse { - [key: `system_cpu${number}_active_percentage`]: string; - system_cpu_active_percentage: string; - system_disk_total_bytes: string; - system_disk_used_bytes: string; - system_memory_total_bytes: string; - system_memory_total_swap_bytes?: string; - system_memory_used_bytes: string; - system_memory_used_swap_bytes?: string; - system_network_received_bytes: string; - system_network_sent_bytes: string; - typesense_memory_active_bytes: string; - typesense_memory_allocated_bytes: string; - typesense_memory_fragmentation_ratio: string; - typesense_memory_mapped_bytes: string; - typesense_memory_metadata_bytes: string; - typesense_memory_resident_bytes: string; - typesense_memory_retained_bytes: string; -} -declare class Metrics$1 { - private apiCall; - constructor(apiCall: ApiCall); - retrieve(): Promise; -} - -interface EndpointStats { - [endpoint: string]: number; -} -interface StatsResponse { - delete_latency_ms?: number; - delete_requests_per_second?: number; - import_latency_ms?: number; - import_requests_per_second?: number; - latency_ms?: EndpointStats; - overloaded_requests_per_second?: number; - pending_write_batches?: number; - requests_per_second?: EndpointStats; - search_latency_ms?: number; - search_requests_per_second?: number; - total_requests_per_second?: number; - write_latency_ms?: number; - write_requests_per_second?: number; -} -declare class Metrics { - private apiCall; - constructor(apiCall: ApiCall); - retrieve(): Promise; -} - -interface HealthResponse { - ok: boolean; -} -declare class Health { - private apiCall; - constructor(apiCall: ApiCall); - retrieve(): Promise; -} - -declare class Operations { - private apiCall; - constructor(apiCall: ApiCall); - perform(operationName: "vote" | "snapshot" | "cache/clear" | (string & {}), queryParameters?: Record): Promise; -} - -interface PresetSchema extends PresetCreateSchema { - name: string; -} -interface PresetDeleteSchema { - name: string; -} -declare class Preset { - private presetId; - private apiCall; - constructor(presetId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface PresetCreateSchema { - value: SearchParams | MultiSearchRequestsSchema; -} -interface PresetsRetrieveSchema { - presets: PresetSchema[]; -} -declare class Presets { - private apiCall; - constructor(apiCall: ApiCall); - upsert(presetId: string, params: PresetCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -interface AnalyticsRuleCreateSchema { - type: "popular_queries" | "nohits_queries" | "counter"; - params: { - enable_auto_aggregation?: boolean; - source: { - collections: string[]; - events?: Array<{ - type: string; - weight: number; - name: string; - }>; - }; - expand_query?: boolean; - destination: { - collection: string; - counter_field?: string; - }; - limit?: number; - }; -} -interface AnalyticsRuleDeleteSchema { - name: string; -} -interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema { - name: string; -} -declare class AnalyticsRule { - private name; - private apiCall; - constructor(name: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface AnalyticsRulesRetrieveSchema { - rules: AnalyticsRuleSchema[]; -} -declare class AnalyticsRules { - private readonly apiCall; - constructor(apiCall: ApiCall); - upsert(name: string, params: AnalyticsRuleCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -interface AnalyticsEventCreateSchema { - type: string; - name: string; - data: Record; -} - -declare class AnalyticsEvents { - private readonly apiCall; - constructor(apiCall: ApiCall); - create(params: AnalyticsEventCreateSchema): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -declare class Analytics { - private readonly apiCall; - private readonly _analyticsRules; - private readonly individualAnalyticsRules; - private readonly _analyticsEvents; - constructor(apiCall: ApiCall); - rules(): AnalyticsRules; - rules(id: string): AnalyticsRule; - events(): AnalyticsEvents; - static get RESOURCEPATH(): string; -} - -interface StopwordSchema extends StopwordCreateSchema { - id: string; - stopwords: string[]; - locale?: string; -} -interface StopwordDeleteSchema { - id: string; -} -declare class Stopword { - private stopwordId; - private apiCall; - constructor(stopwordId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface StopwordCreateSchema { - stopwords: string[]; - locale?: string; -} -interface StopwordsRetrieveSchema { - stopwords: StopwordSchema[]; -} -declare class Stopwords { - private apiCall; - constructor(apiCall: ApiCall); - upsert(stopwordId: string, params: StopwordCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -interface ConversationModelCreateSchema { - id?: string; - model_name: string; - api_key?: string; - system_prompt?: string; - max_bytes: number; - history_collection?: string; -} -interface ConversationModelDeleteSchema { - id: string; -} -interface ConversationModelSchema extends ConversationModelCreateSchema { - id: string; -} -declare class ConversationModel { - private id; - private apiCall; - constructor(id: string, apiCall: ApiCall); - update(params: ConversationModelCreateSchema): Promise; - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -declare class ConversationModels { - private readonly apiCall; - constructor(apiCall: ApiCall); - create(params: ConversationModelCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -interface ConversationDeleteSchema { - id: number; -} -interface ConversationUpdateSchema { - ttl: number; -} -interface ConversationSchema { - id: number; - conversation: object[]; - last_updated: number; - ttl: number; -} -declare class Conversation { - private id; - private apiCall; - constructor(id: string, apiCall: ApiCall); - retrieve(): Promise; - update(params: ConversationUpdateSchema): Promise; - delete(): Promise; - private endpointPath; -} - -interface ConversationsRetrieveSchema { - conversations: ConversationSchema[]; -} -declare class Conversations { - private readonly apiCall; - private readonly _conversationsModels; - private readonly individualConversationModels; - constructor(apiCall: ApiCall); - retrieve(): Promise; - models(): ConversationModels; - models(id: string): ConversationModel; - static get RESOURCEPATH(): string; -} - -declare class Client { - configuration: Configuration; - apiCall: ApiCall; - debug: Debug; - metrics: Metrics$1; - stats: Metrics; - health: Health; - operations: Operations; - multiSearch: MultiSearch; - analytics: Analytics; - private readonly _collections; - private readonly individualCollections; - private readonly _aliases; - private readonly individualAliases; - private readonly _keys; - private readonly individualKeys; - private readonly _presets; - private readonly individualPresets; - private readonly _stopwords; - private readonly individualStopwords; - private readonly _conversations; - private readonly individualConversations; - constructor(options: ConfigurationOptions); - collections(): Collections; - collections = object>(collectionName: string): Collection; - aliases(): Aliases; - aliases(aliasName: string): Alias; - keys(): Keys; - keys(id: number): Key; - presets(): Presets; - presets(id: string): Preset; - stopwords(): Stopwords; - stopwords(id: string): Stopword; - conversations(): Conversations; - conversations(id: string): Conversation; -} - -declare class HTTPError extends TypesenseError { -} - -declare class MissingConfigurationError extends TypesenseError { -} - -declare class ObjectAlreadyExists extends TypesenseError { -} - -declare class ObjectNotFound extends TypesenseError { -} - -declare class ObjectUnprocessable extends TypesenseError { -} - -declare class RequestMalformed extends TypesenseError { -} - -declare class RequestUnauthorized extends TypesenseError { -} - -declare class ServerError extends TypesenseError { -} - -interface ImportErrorPayload { - documentsInJSONLFormat: string | ReadStream$1; - options: DocumentImportParameters; - failedItems: ImportResponse[]; - successCount: number; -} -declare class ImportError extends TypesenseError { - payload: ImportErrorPayload; - importResults: ImportResponse[]; - constructor(message: string, importResults: ImportResponse[], payload: ImportErrorPayload); -} - -type index_HTTPError = HTTPError; -declare const index_HTTPError: typeof HTTPError; -type index_ImportError = ImportError; -declare const index_ImportError: typeof ImportError; -type index_MissingConfigurationError = MissingConfigurationError; -declare const index_MissingConfigurationError: typeof MissingConfigurationError; -type index_ObjectAlreadyExists = ObjectAlreadyExists; -declare const index_ObjectAlreadyExists: typeof ObjectAlreadyExists; -type index_ObjectNotFound = ObjectNotFound; -declare const index_ObjectNotFound: typeof ObjectNotFound; -type index_ObjectUnprocessable = ObjectUnprocessable; -declare const index_ObjectUnprocessable: typeof ObjectUnprocessable; -type index_RequestMalformed = RequestMalformed; -declare const index_RequestMalformed: typeof RequestMalformed; -type index_RequestUnauthorized = RequestUnauthorized; -declare const index_RequestUnauthorized: typeof RequestUnauthorized; -type index_ServerError = ServerError; -declare const index_ServerError: typeof ServerError; -type index_TypesenseError = TypesenseError; -declare const index_TypesenseError: typeof TypesenseError; -declare namespace index { - export { index_HTTPError as HTTPError, index_ImportError as ImportError, index_MissingConfigurationError as MissingConfigurationError, index_ObjectAlreadyExists as ObjectAlreadyExists, index_ObjectNotFound as ObjectNotFound, index_ObjectUnprocessable as ObjectUnprocessable, index_RequestMalformed as RequestMalformed, index_RequestUnauthorized as RequestUnauthorized, index_ServerError as ServerError, index_TypesenseError as TypesenseError }; -} - -export { type AnalyticsEventCreateSchema, type AnalyticsRuleCreateSchema, type AnalyticsRuleDeleteSchema, type AnalyticsRuleSchema, type AnalyticsRulesRetrieveSchema, type ArraybleParams, Client, type CollectionAliasCreateSchema, type CollectionAliasSchema, type CollectionAliasesResponseSchema, type CollectionCreateOptions, type CollectionCreateSchema, type CollectionDeleteOptions, type CollectionDropFieldSchema, type CollectionFieldSchema, type CollectionSchema, type CollectionUpdateSchema, type CollectionsRetrieveOptions, type ConfigurationOptions, type ConversationDeleteSchema, type ConversationModelCreateSchema, type ConversationModelDeleteSchema, type ConversationModelSchema, type ConversationSchema, type ConversationUpdateSchema, type ConversationsRetrieveSchema, type DebugResponseSchema, type DeleteQuery, type DeleteResponse, type DocumentImportParameters, type DocumentSchema, type DocumentWriteParameters, type DocumentsExportParameters, type DropTokensMode, type EndpointStats, index as Errors, type ExtractBaseTypes, type FieldType, type GenerateScopedSearchKeyParams, type HealthResponse, type ImportResponse, type ImportResponseFail, type KeyCreateSchema, type KeyDeleteSchema, type KeySchema, type KeysRetrieveSchema, type MetricsResponse, type MultiSearchRequestSchema, type MultiSearchRequestWithPresetSchema, type MultiSearchRequestsSchema, type MultiSearchResponse, type NodeConfiguration, type NodeConfigurationWithHostname, type NodeConfigurationWithUrl, type OperationMode, type OverrideCreateSchema, type OverrideDeleteSchema, type OverrideRuleFilterSchema, type OverrideRuleQuerySchema, type OverrideRuleTagsSchema, type OverrideSchema, type OverridesRetrieveSchema, type PresetCreateSchema, type PresetDeleteSchema, type PresetSchema, type PresetsRetrieveSchema, SearchClient, type SearchOptions, type SearchParams, type SearchParamsWithPreset, type SearchResponse, type SearchResponseFacetCountSchema, type SearchResponseHighlight, type SearchResponseHit, type SearchResponseRequestParams, type SearchableDocuments, type StatsResponse, type StopwordCreateSchema, type StopwordDeleteSchema, type StopwordSchema, type StopwordsRetrieveSchema, type SynonymCreateSchema, type SynonymDeleteSchema, type SynonymSchema, type SynonymsRetrieveSchema, type UnionArrayKeys, type UnionArraySearchParams, type UpdateByFilterParameters, type UpdateByFilterResponse, type WriteableDocuments, arrayableParams }; diff --git a/lib/Typesense.d.ts b/lib/Typesense.d.ts index 9814771e..efd33ae8 100644 --- a/lib/Typesense.d.ts +++ b/lib/Typesense.d.ts @@ -1,1125 +1,36 @@ -import logger from 'loglevel'; -import { Agent } from 'http'; -import { Agent as Agent$1 } from 'https'; -import { AxiosRequestConfig, Method, AxiosResponse } from 'axios'; -import { ReadStream } from 'fs'; -import { ReadStream as ReadStream$1 } from 'node:fs'; - -interface NodeConfiguration { - host: string; - port: number; - protocol: string; - path?: string; - url?: string; -} -interface NodeConfigurationWithHostname { - host: string; - port: number; - protocol: string; - path?: string; -} -interface NodeConfigurationWithUrl { - url: string; -} -interface ConfigurationOptions { - apiKey: string; - nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; - randomizeNodes?: boolean; - /** - * @deprecated - * masterNode is now consolidated to nodes, starting with Typesense Server v0.12' - */ - masterNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; - /** - * @deprecated - * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12' - */ - readReplicaNodes?: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; - nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; - connectionTimeoutSeconds?: number; - timeoutSeconds?: number; - healthcheckIntervalSeconds?: number; - numRetries?: number; - retryIntervalSeconds?: number; - sendApiKeyAsQueryParam?: boolean | undefined; - useServerSideSearchCache?: boolean; - cacheSearchResultsForSeconds?: number; - additionalHeaders?: Record; - logLevel?: logger.LogLevelDesc; - logger?: logger.Logger; - /** - * Set a custom HTTP Agent - * - * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors - * Usage: - * const { Agent: HTTPAgent } = require("http"); - * ... - * httpAgent: new HTTPAgent({ keepAlive: true }), - * @type {HTTPAgent} - */ - httpAgent?: Agent; - /** - * Set a custom HTTPS Agent - * - * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors - * Usage: - * const { Agent: HTTPSAgent } = require("https"); - * ... - * httpsAgent: new HTTPSAgent({ keepAlive: true }), - * @type {HTTPSAgent} - */ - httpsAgent?: Agent$1; - /** - * Set a custom paramsSerializer - * - * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config - * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397 - * @type {any} - */ - paramsSerializer?: any; - /** - * Set a custom axios adapter - * - * Useful for customizing the underlying HTTP client library used by Typesense. - * - * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge. - * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161 - * - * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config - */ - axiosAdapter?: AxiosRequestConfig["adapter"]; -} -declare class Configuration { - readonly nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; - readonly nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; - readonly connectionTimeoutSeconds: number; - readonly healthcheckIntervalSeconds: number; - readonly numRetries: number; - readonly retryIntervalSeconds: number; - readonly apiKey: string; - readonly sendApiKeyAsQueryParam?: boolean; - readonly cacheSearchResultsForSeconds: number; - readonly useServerSideSearchCache: boolean; - readonly logger: logger.Logger; - readonly logLevel: logger.LogLevelDesc; - readonly additionalHeaders?: Record; - readonly httpAgent?: Agent; - readonly httpsAgent?: Agent$1; - readonly paramsSerializer?: any; - readonly axiosAdapter?: AxiosRequestConfig["adapter"]; - constructor(options: ConfigurationOptions); - validate(): boolean; - private validateNodes; - private isNodeMissingAnyParameters; - private setDefaultPathInNode; - private setDefaultPortInNode; - private showDeprecationWarnings; - private shuffleArray; -} - -declare class TypesenseError extends Error { - httpStatus?: number; - httpBody?: string; - constructor(message?: string, httpBody?: string, httpStatus?: number); -} - -interface Node extends NodeConfiguration { - isHealthy: boolean; - index: string | number; -} -declare class ApiCall { - private configuration; - private readonly apiKey; - private readonly nodes; - private readonly nearestNode; - private readonly connectionTimeoutSeconds; - private readonly healthcheckIntervalSeconds; - private readonly retryIntervalSeconds; - private readonly sendApiKeyAsQueryParam?; - private readonly numRetriesPerRequest; - private readonly additionalUserHeaders?; - private readonly logger; - private currentNodeIndex; - constructor(configuration: Configuration); - get(endpoint: string, queryParameters?: any, { abortSignal, responseType, }?: { - abortSignal?: any; - responseType?: AxiosRequestConfig["responseType"] | undefined; - }): Promise; - delete(endpoint: string, queryParameters?: any): Promise; - post(endpoint: string, bodyParameters?: any, queryParameters?: any, additionalHeaders?: any): Promise; - put(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; - patch(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; - private getAdapter; - performRequest(requestType: Method, endpoint: string, { queryParameters, bodyParameters, additionalHeaders, abortSignal, responseType, skipConnectionTimeout, enableKeepAlive, }: { - queryParameters?: any; - bodyParameters?: any; - additionalHeaders?: any; - abortSignal?: any; - responseType?: AxiosRequestConfig["responseType"] | undefined; - skipConnectionTimeout?: boolean; - enableKeepAlive?: boolean | undefined; - }): Promise; - getNextNode(requestNumber?: number): Node; - nodeDueForHealthcheck(node: any, requestNumber?: number): boolean; - initializeMetadataForNodes(): void; - setNodeHealthcheck(node: any, isHealthy: any): void; - uriFor(endpoint: string, node: any): string; - defaultHeaders(): any; - timer(seconds: any): Promise; - customErrorForResponse(response: AxiosResponse, messageFromServer: string, httpBody?: string): TypesenseError; -} - -declare class RequestWithCache { - private responseCache; - private responsePromiseCache; - clearCache(): void; - perform(requestContext: any, requestFunction: (...params: any) => unknown, requestFunctionArguments: any[], cacheOptions: CacheOptions): Promise; -} -interface CacheOptions { - cacheResponseForSeconds?: number; - maxSize?: number; -} - -declare class SearchOnlyDocuments implements SearchableDocuments { - protected collectionName: string; - protected apiCall: ApiCall; - protected configuration: Configuration; - protected requestWithCache: RequestWithCache; - constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); - clearCache(): void; - search(searchParameters: SearchParams | SearchParamsWithPreset, { cacheSearchResultsForSeconds, abortSignal, }?: SearchOptions): Promise>; - protected endpointPath(operation?: string): string; - static get RESOURCEPATH(): string; -} - -interface DeleteQuery { - filter_by?: string; - batch_size?: number; - ignore_not_found?: boolean; -} -interface DeleteResponse { - num_deleted: number; -} -interface ImportResponseSuccess { - success: true; -} -interface ImportResponseFail { - success: false; - error: string; - document: DocumentSchema; - code: number; -} -type ImportResponse = ImportResponseSuccess | ImportResponseFail; -type DocumentSchema = Record; -interface SearchParamsWithPreset extends Partial { - preset: string; -} -type DropTokensMode = "right_to_left" | "left_to_right" | "both_sides:3"; -type OperationMode = "off" | "always" | "fallback"; -type UnionArrayKeys = { - [K in keyof T]: T[K] extends undefined ? never : NonNullable extends infer R ? R extends R[] ? never : R extends (infer U)[] | infer U ? U[] extends R ? K : never : never : never; -}[keyof T] & keyof T; -type UnionArraySearchParams = UnionArrayKeys; -type ArraybleParams = { - readonly [K in UnionArraySearchParams]: string; +import Client from "./Typesense/Client"; +import SearchClient from "./Typesense/SearchClient"; +import * as Errors from "./Typesense/Errors"; +export { Client, SearchClient, Errors }; +declare const _default: { + Client: typeof Client; + SearchClient: typeof SearchClient; + Errors: typeof Errors; }; -type ExtractBaseTypes = { - [K in keyof T]: K extends UnionArrayKeys ? T[K] extends (infer U)[] | infer U ? U : T[K] : T[K]; -}; -declare const arrayableParams: ArraybleParams; -interface SearchParams { - q?: "*" | (string & {}); - query_by?: string | string[]; - query_by_weights?: string | number[]; - prefix?: string | boolean | boolean[]; - filter_by?: string; - enable_synonyms?: boolean; - enable_analytics?: boolean; - filter_curated_hits?: boolean; - enable_lazy_filter?: boolean; - sort_by?: string | string[]; - facet_by?: string | string[]; - max_facet_values?: number; - facet_sample_threshold?: number; - facet_sample_percent?: number; - facet_query?: string; - facet_query_num_typos?: number; - facet_return_parent?: string; - facet_strategy?: "exhaustive" | "top_values" | "automatic"; - page?: number; - per_page?: number; - group_by?: string | string[]; - group_limit?: number; - group_missing_values?: boolean; - include_fields?: string | string[]; - exclude_fields?: string | string[]; - highlight_fields?: string | string[]; - highlight_full_fields?: string | string[]; - highlight_affix_num_tokens?: number; - highlight_start_tag?: string; - highlight_end_tag?: string; - enable_highlight_v1?: boolean; - snippet_threshold?: number; - num_typos?: string | number | number[]; - min_len_1typo?: number; - min_len_2typo?: number; - split_join_tokens?: OperationMode; - exhaustive_search?: boolean; - drop_tokens_threshold?: number; - drop_tokens_mode?: DropTokensMode; - typo_tokens_threshold?: number; - pinned_hits?: string | string[]; - hidden_hits?: string | string[]; - limit_hits?: number; - pre_segmented_query?: boolean; - enable_overrides?: boolean; - override_tags?: string | string[]; - prioritize_exact_match?: boolean; - prioritize_token_position?: boolean; - prioritize_num_matching_fields?: boolean; - search_cutoff_ms?: number; - use_cache?: boolean; - max_candidates?: number; - infix?: OperationMode | OperationMode[]; - preset?: string; - text_match_type?: "max_score" | "max_weight"; - vector_query?: string; - "x-typesense-api-key"?: string; - "x-typesense-user-id"?: string; - offset?: number; - limit?: number; - stopwords?: string; - conversation?: boolean; - conversation_model_id?: string; - conversation_id?: string; - voice_query?: string; -} -type SearchResponseHighlightObject = { - matched_tokens?: string[]; - snippet?: string; - value?: string; -}; -type SearchResponseHighlight = T extends string | number ? SearchResponseHighlightObject : { - [TAttribute in keyof T]?: SearchResponseHighlight; -}; -interface SearchResponseHit { - curated?: true; - highlights?: [ - { - field: keyof T; - snippet?: string; - value?: string; - snippets?: string[]; - indices?: number[]; - matched_tokens: string[][] | string[]; - } - ]; - highlight: SearchResponseHighlight; - document: T; - text_match: number; - text_match_info?: { - best_field_score: `${number}`; - best_field_weight: number; - fields_matched: number; - score: `${number}`; - tokens_matched: number; - }; -} -interface SearchResponseFacetCountSchema { - counts: { - count: number; - highlighted: string; - value: string; - }[]; - field_name: keyof T; - stats: { - avg?: number; - max?: number; - min?: number; - sum?: number; - }; -} -interface SearchResponseRequestParams { - collection_name?: string; - q?: string; - page?: number; - per_page?: number; - first_q?: string; - voice_query?: { - transcribed_query?: string; - }; -} -interface SearchResponse { - facet_counts?: SearchResponseFacetCountSchema[]; - found: number; - found_docs?: number; - out_of: number; - page: number; - request_params: SearchResponseRequestParams; - search_time_ms: number; - search_cutoff?: boolean; - hits?: SearchResponseHit[]; - grouped_hits?: { - group_key: string[]; - hits: SearchResponseHit[]; - found?: number; - }[]; - conversation?: { - answer: string; - conversation_history: { - conversation: object[]; - id: string; - last_updated: number; - ttl: number; - }; - conversation_id: string; - query: string; - }; - error?: string; - code?: number; -} -interface DocumentWriteParameters { - dirty_values?: "coerce_or_reject" | "coerce_or_drop" | "drop" | "reject"; - action?: "create" | "update" | "upsert" | "emplace"; -} -interface UpdateByFilterParameters { - filter_by?: string; -} -interface UpdateByFilterResponse { - num_updated: number; -} -interface DocumentImportParameters extends DocumentWriteParameters { - batch_size?: number; - return_doc?: boolean; - return_id?: boolean; -} -interface DocumentsExportParameters { - filter_by?: string; - include_fields?: string; - exclude_fields?: string; -} -interface SearchableDocuments { - search(searchParameters: SearchParams | SearchParamsWithPreset, options: SearchOptions): Promise>; - clearCache(): void; -} -interface WriteableDocuments { - create(document: T, options: DocumentWriteParameters): Promise; - upsert(document: T, options: DocumentWriteParameters): Promise; - update(document: T, options: DocumentWriteParameters): Promise; - delete(query: DeleteQuery): Promise; - import(documents: T[] | string, options: DocumentWriteParameters): Promise; - export(options: DocumentsExportParameters): Promise; -} -interface SearchOptions { - cacheSearchResultsForSeconds?: number; - abortSignal?: AbortSignal | null; -} -declare class Documents extends SearchOnlyDocuments implements WriteableDocuments { - constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); - create(document: T, options?: DocumentWriteParameters): Promise; - upsert(document: T, options?: DocumentWriteParameters): Promise; - update(document: T, options: UpdateByFilterParameters): Promise; - update(document: T, options: DocumentWriteParameters): Promise; - delete(query?: DeleteQuery): Promise; - createMany(documents: T[], options?: DocumentImportParameters): Promise; - /** - * Import a set of documents in a batch. - * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects. - * @param options - * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results. - */ - import(documents: string, options?: DocumentImportParameters): Promise; - import(documents: T[], options?: DocumentImportParameters): Promise; - /** - * Imports documents from a NodeJS readable stream of JSONL. - */ - importStream(readableStream: ReadStream, options?: DocumentImportParameters): Promise; - /** - * Returns a JSONL string for all the documents in this collection - */ - export(options?: DocumentsExportParameters): Promise; - /** - * Returns a NodeJS readable stream of JSONL for all the documents in this collection. - */ - exportStream(options?: DocumentsExportParameters): Promise; -} - -interface MultiSearchRequestSchema extends SearchParams { - collection?: string; - "x-typesense-api-key"?: string; -} -interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { - collection?: string; - "x-typesense-api-key"?: string; -} -interface MultiSearchRequestsSchema { - searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; -} -interface MultiSearchResponse { - results: { - [Index in keyof T]: SearchResponse; - } & { - length: T["length"]; - }; -} -declare class MultiSearch { - private apiCall; - private configuration; - private useTextContentType; - private requestWithCache; - constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); - clearCache(): void; - perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { - cacheSearchResultsForSeconds?: number; - }): Promise>; -} - -declare class SearchOnlyCollection { - private readonly name; - private readonly apiCall; - private readonly configuration; - private readonly _documents; - constructor(name: string, apiCall: ApiCall, configuration: any); - documents(): SearchableDocuments; -} - -declare class SearchClient { - readonly multiSearch: MultiSearch; - private readonly configuration; - private readonly apiCall; - private readonly individualCollections; - constructor(options: ConfigurationOptions); - clearCache(): void; - collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; -} - -interface OverrideSchema extends OverrideCreateSchema { - id: string; -} -interface OverrideDeleteSchema { - id: string; -} -declare class Override { - private collectionName; - private overrideId; - private apiCall; - constructor(collectionName: string, overrideId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface OverrideRuleQuerySchema { - query?: string; - match?: "exact" | "contains"; -} -interface OverrideRuleFilterSchema { - filter_by?: string; -} -interface OverrideRuleTagsSchema { - tags?: string[]; -} -interface OverrideCreateSchema { - rule: OverrideRuleQuerySchema & OverrideRuleFilterSchema & OverrideRuleTagsSchema; - filter_by?: string; - sort_by?: string; - remove_matched_tokens?: boolean; - replace_query?: string; - includes?: Array<{ - id: string; - position: number; - }>; - excludes?: Array<{ - id: string; - }>; - filter_curated_hits?: boolean; - effective_from_ts?: number; - effective_to_ts?: number; - stop_processing?: boolean; - metadata?: object; -} -interface OverridesRetrieveSchema { - overrides: OverrideSchema[]; -} -declare class Overrides { - private collectionName; - private apiCall; - constructor(collectionName: string, apiCall: ApiCall); - upsert(overrideId: string, params: OverrideCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -interface SynonymSchema extends SynonymCreateSchema { - id: string; -} -interface SynonymDeleteSchema { - id: string; -} -declare class Synonym { - private collectionName; - private synonymId; - private apiCall; - constructor(collectionName: string, synonymId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface SynonymCreateSchema { - synonyms: string[]; - root?: string; - locale?: string; - symbols_to_index?: string[]; -} -interface SynonymsRetrieveSchema { - synonyms: SynonymSchema[]; -} -declare class Synonyms { - private collectionName; - private apiCall; - constructor(collectionName: string, apiCall: ApiCall); - upsert(synonymId: string, params: SynonymCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -declare class Document { - private collectionName; - private documentId; - private apiCall; - constructor(collectionName: string, documentId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(options?: DeleteQuery): Promise; - update(partialDocument: Partial, options?: DocumentWriteParameters): Promise; - private endpointPath; -} - -type FieldType = "string" | "int32" | "int64" | "float" | "bool" | "geopoint" | "geopoint[]" | "string[]" | "int32[]" | "int64[]" | "float[]" | "bool[]" | "object" | "object[]" | "auto" | "string*" | "image"; -interface CollectionFieldSchema { - name: string; - type: FieldType; - optional?: boolean; - facet?: boolean; - index?: boolean; - sort?: boolean; - locale?: string; - infix?: boolean; - stem?: boolean; - num_dim?: number; - store?: boolean; - range_index?: boolean; - [t: string]: unknown; -} -interface CollectionSchema extends CollectionCreateSchema { - created_at: number; - num_documents: number; - num_memory_shards: number; -} -interface CollectionDropFieldSchema { - name: string; - drop: true; -} -interface CollectionUpdateSchema extends Partial> { - fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[]; -} -interface CollectionDeleteOptions { - compact_store?: boolean; -} -declare class Collection { - private readonly name; - private readonly apiCall; - private readonly configuration; - private readonly _documents; - private individualDocuments; - private readonly _overrides; - private individualOverrides; - private readonly _synonyms; - private individualSynonyms; - constructor(name: string, apiCall: ApiCall, configuration: any); - retrieve(): Promise; - update(schema: CollectionUpdateSchema): Promise; - delete(options?: CollectionDeleteOptions): Promise; - exists(): Promise; - documents(): Documents; - documents(documentId: string): Document; - overrides(): Overrides; - overrides(overrideId: string): Override; - synonyms(): Synonyms; - synonyms(synonymId: string): Synonym; - private endpointPath; -} - -interface CollectionCreateSchema { - name: string; - default_sorting_field?: string; - fields?: CollectionFieldSchema[]; - symbols_to_index?: string[]; - token_separators?: string[]; - enable_nested_fields?: boolean; - metadata?: object; - voice_query_model?: { - model_name?: string; - }; -} -interface CollectionCreateOptions { - src_name?: string; -} -interface CollectionsRetrieveOptions { - exclude_fields?: string; -} -declare class Collections { - private apiCall; - constructor(apiCall: ApiCall); - create(schema: CollectionCreateSchema, options?: CollectionCreateOptions): Promise; - retrieve(options?: CollectionsRetrieveOptions): Promise; - static get RESOURCEPATH(): string; -} - -interface CollectionAliasCreateSchema { - collection_name: string; -} -interface CollectionAliasSchema extends CollectionAliasCreateSchema { - name: string; -} -interface CollectionAliasesResponseSchema { - aliases: CollectionAliasSchema[]; -} -declare class Aliases { - private apiCall; - constructor(apiCall: ApiCall); - upsert(name: string, mapping: CollectionAliasCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -declare class Alias { - private name; - private apiCall; - constructor(name: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface KeyCreateSchema { - actions: string[]; - collections: string[]; - description?: string; - value?: string; - value_prefix?: string; - expires_at?: number; - autodelete?: boolean; -} -interface KeyDeleteSchema { - id: number; -} -interface KeySchema extends KeyCreateSchema { - id: number; -} -declare class Key { - private id; - private apiCall; - constructor(id: number, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface KeysRetrieveSchema { - keys: KeySchema[]; -} -interface GenerateScopedSearchKeyParams extends Partial { - expires_at?: number; - cache_ttl?: number; - limit_multi_searches?: number; -} -declare class Keys { - private apiCall; - constructor(apiCall: ApiCall); - create(params: KeyCreateSchema): Promise; - retrieve(): Promise; - generateScopedSearchKey(searchKey: string, parameters: GenerateScopedSearchKeyParams): string; - static get RESOURCEPATH(): string; -} - -interface DebugResponseSchema { - state: number; - version: string; -} -declare class Debug { - private apiCall; - constructor(apiCall: ApiCall); - retrieve(): Promise; -} - -interface MetricsResponse { - [key: `system_cpu${number}_active_percentage`]: string; - system_cpu_active_percentage: string; - system_disk_total_bytes: string; - system_disk_used_bytes: string; - system_memory_total_bytes: string; - system_memory_total_swap_bytes?: string; - system_memory_used_bytes: string; - system_memory_used_swap_bytes?: string; - system_network_received_bytes: string; - system_network_sent_bytes: string; - typesense_memory_active_bytes: string; - typesense_memory_allocated_bytes: string; - typesense_memory_fragmentation_ratio: string; - typesense_memory_mapped_bytes: string; - typesense_memory_metadata_bytes: string; - typesense_memory_resident_bytes: string; - typesense_memory_retained_bytes: string; -} -declare class Metrics$1 { - private apiCall; - constructor(apiCall: ApiCall); - retrieve(): Promise; -} - -interface EndpointStats { - [endpoint: string]: number; -} -interface StatsResponse { - delete_latency_ms?: number; - delete_requests_per_second?: number; - import_latency_ms?: number; - import_requests_per_second?: number; - latency_ms?: EndpointStats; - overloaded_requests_per_second?: number; - pending_write_batches?: number; - requests_per_second?: EndpointStats; - search_latency_ms?: number; - search_requests_per_second?: number; - total_requests_per_second?: number; - write_latency_ms?: number; - write_requests_per_second?: number; -} -declare class Metrics { - private apiCall; - constructor(apiCall: ApiCall); - retrieve(): Promise; -} - -interface HealthResponse { - ok: boolean; -} -declare class Health { - private apiCall; - constructor(apiCall: ApiCall); - retrieve(): Promise; -} - -declare class Operations { - private apiCall; - constructor(apiCall: ApiCall); - perform(operationName: "vote" | "snapshot" | "cache/clear" | (string & {}), queryParameters?: Record): Promise; -} - -interface PresetSchema extends PresetCreateSchema { - name: string; -} -interface PresetDeleteSchema { - name: string; -} -declare class Preset { - private presetId; - private apiCall; - constructor(presetId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface PresetCreateSchema { - value: SearchParams | MultiSearchRequestsSchema; -} -interface PresetsRetrieveSchema { - presets: PresetSchema[]; -} -declare class Presets { - private apiCall; - constructor(apiCall: ApiCall); - upsert(presetId: string, params: PresetCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -interface AnalyticsRuleCreateSchema { - type: "popular_queries" | "nohits_queries" | "counter"; - params: { - enable_auto_aggregation?: boolean; - source: { - collections: string[]; - events?: Array<{ - type: string; - weight: number; - name: string; - }>; - }; - expand_query?: boolean; - destination: { - collection: string; - counter_field?: string; - }; - limit?: number; - }; -} -interface AnalyticsRuleDeleteSchema { - name: string; -} -interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema { - name: string; -} -declare class AnalyticsRule { - private name; - private apiCall; - constructor(name: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface AnalyticsRulesRetrieveSchema { - rules: AnalyticsRuleSchema[]; -} -declare class AnalyticsRules { - private readonly apiCall; - constructor(apiCall: ApiCall); - upsert(name: string, params: AnalyticsRuleCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -interface AnalyticsEventCreateSchema { - type: string; - name: string; - data: Record; -} - -declare class AnalyticsEvents { - private readonly apiCall; - constructor(apiCall: ApiCall); - create(params: AnalyticsEventCreateSchema): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -declare class Analytics { - private readonly apiCall; - private readonly _analyticsRules; - private readonly individualAnalyticsRules; - private readonly _analyticsEvents; - constructor(apiCall: ApiCall); - rules(): AnalyticsRules; - rules(id: string): AnalyticsRule; - events(): AnalyticsEvents; - static get RESOURCEPATH(): string; -} - -interface StopwordSchema extends StopwordCreateSchema { - id: string; - stopwords: string[]; - locale?: string; -} -interface StopwordDeleteSchema { - id: string; -} -declare class Stopword { - private stopwordId; - private apiCall; - constructor(stopwordId: string, apiCall: ApiCall); - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -interface StopwordCreateSchema { - stopwords: string[]; - locale?: string; -} -interface StopwordsRetrieveSchema { - stopwords: StopwordSchema[]; -} -declare class Stopwords { - private apiCall; - constructor(apiCall: ApiCall); - upsert(stopwordId: string, params: StopwordCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -interface ConversationModelCreateSchema { - id?: string; - model_name: string; - api_key?: string; - system_prompt?: string; - max_bytes: number; - history_collection?: string; -} -interface ConversationModelDeleteSchema { - id: string; -} -interface ConversationModelSchema extends ConversationModelCreateSchema { - id: string; -} -declare class ConversationModel { - private id; - private apiCall; - constructor(id: string, apiCall: ApiCall); - update(params: ConversationModelCreateSchema): Promise; - retrieve(): Promise; - delete(): Promise; - private endpointPath; -} - -declare class ConversationModels { - private readonly apiCall; - constructor(apiCall: ApiCall); - create(params: ConversationModelCreateSchema): Promise; - retrieve(): Promise; - private endpointPath; - static get RESOURCEPATH(): string; -} - -interface ConversationDeleteSchema { - id: number; -} -interface ConversationUpdateSchema { - ttl: number; -} -interface ConversationSchema { - id: number; - conversation: object[]; - last_updated: number; - ttl: number; -} -declare class Conversation { - private id; - private apiCall; - constructor(id: string, apiCall: ApiCall); - retrieve(): Promise; - update(params: ConversationUpdateSchema): Promise; - delete(): Promise; - private endpointPath; -} - -interface ConversationsRetrieveSchema { - conversations: ConversationSchema[]; -} -declare class Conversations { - private readonly apiCall; - private readonly _conversationsModels; - private readonly individualConversationModels; - constructor(apiCall: ApiCall); - retrieve(): Promise; - models(): ConversationModels; - models(id: string): ConversationModel; - static get RESOURCEPATH(): string; -} - -declare class Client { - configuration: Configuration; - apiCall: ApiCall; - debug: Debug; - metrics: Metrics$1; - stats: Metrics; - health: Health; - operations: Operations; - multiSearch: MultiSearch; - analytics: Analytics; - private readonly _collections; - private readonly individualCollections; - private readonly _aliases; - private readonly individualAliases; - private readonly _keys; - private readonly individualKeys; - private readonly _presets; - private readonly individualPresets; - private readonly _stopwords; - private readonly individualStopwords; - private readonly _conversations; - private readonly individualConversations; - constructor(options: ConfigurationOptions); - collections(): Collections; - collections = object>(collectionName: string): Collection; - aliases(): Aliases; - aliases(aliasName: string): Alias; - keys(): Keys; - keys(id: number): Key; - presets(): Presets; - presets(id: string): Preset; - stopwords(): Stopwords; - stopwords(id: string): Stopword; - conversations(): Conversations; - conversations(id: string): Conversation; -} - -declare class HTTPError extends TypesenseError { -} - -declare class MissingConfigurationError extends TypesenseError { -} - -declare class ObjectAlreadyExists extends TypesenseError { -} - -declare class ObjectNotFound extends TypesenseError { -} - -declare class ObjectUnprocessable extends TypesenseError { -} - -declare class RequestMalformed extends TypesenseError { -} - -declare class RequestUnauthorized extends TypesenseError { -} - -declare class ServerError extends TypesenseError { -} - -interface ImportErrorPayload { - documentsInJSONLFormat: string | ReadStream$1; - options: DocumentImportParameters; - failedItems: ImportResponse[]; - successCount: number; -} -declare class ImportError extends TypesenseError { - payload: ImportErrorPayload; - importResults: ImportResponse[]; - constructor(message: string, importResults: ImportResponse[], payload: ImportErrorPayload); -} - -type index_HTTPError = HTTPError; -declare const index_HTTPError: typeof HTTPError; -type index_ImportError = ImportError; -declare const index_ImportError: typeof ImportError; -type index_MissingConfigurationError = MissingConfigurationError; -declare const index_MissingConfigurationError: typeof MissingConfigurationError; -type index_ObjectAlreadyExists = ObjectAlreadyExists; -declare const index_ObjectAlreadyExists: typeof ObjectAlreadyExists; -type index_ObjectNotFound = ObjectNotFound; -declare const index_ObjectNotFound: typeof ObjectNotFound; -type index_ObjectUnprocessable = ObjectUnprocessable; -declare const index_ObjectUnprocessable: typeof ObjectUnprocessable; -type index_RequestMalformed = RequestMalformed; -declare const index_RequestMalformed: typeof RequestMalformed; -type index_RequestUnauthorized = RequestUnauthorized; -declare const index_RequestUnauthorized: typeof RequestUnauthorized; -type index_ServerError = ServerError; -declare const index_ServerError: typeof ServerError; -type index_TypesenseError = TypesenseError; -declare const index_TypesenseError: typeof TypesenseError; -declare namespace index { - export { index_HTTPError as HTTPError, index_ImportError as ImportError, index_MissingConfigurationError as MissingConfigurationError, index_ObjectAlreadyExists as ObjectAlreadyExists, index_ObjectNotFound as ObjectNotFound, index_ObjectUnprocessable as ObjectUnprocessable, index_RequestMalformed as RequestMalformed, index_RequestUnauthorized as RequestUnauthorized, index_ServerError as ServerError, index_TypesenseError as TypesenseError }; -} - -export { type AnalyticsEventCreateSchema, type AnalyticsRuleCreateSchema, type AnalyticsRuleDeleteSchema, type AnalyticsRuleSchema, type AnalyticsRulesRetrieveSchema, type ArraybleParams, Client, type CollectionAliasCreateSchema, type CollectionAliasSchema, type CollectionAliasesResponseSchema, type CollectionCreateOptions, type CollectionCreateSchema, type CollectionDeleteOptions, type CollectionDropFieldSchema, type CollectionFieldSchema, type CollectionSchema, type CollectionUpdateSchema, type CollectionsRetrieveOptions, type ConfigurationOptions, type ConversationDeleteSchema, type ConversationModelCreateSchema, type ConversationModelDeleteSchema, type ConversationModelSchema, type ConversationSchema, type ConversationUpdateSchema, type ConversationsRetrieveSchema, type DebugResponseSchema, type DeleteQuery, type DeleteResponse, type DocumentImportParameters, type DocumentSchema, type DocumentWriteParameters, type DocumentsExportParameters, type DropTokensMode, type EndpointStats, index as Errors, type ExtractBaseTypes, type FieldType, type GenerateScopedSearchKeyParams, type HealthResponse, type ImportResponse, type ImportResponseFail, type KeyCreateSchema, type KeyDeleteSchema, type KeySchema, type KeysRetrieveSchema, type MetricsResponse, type MultiSearchRequestSchema, type MultiSearchRequestWithPresetSchema, type MultiSearchRequestsSchema, type MultiSearchResponse, type NodeConfiguration, type NodeConfigurationWithHostname, type NodeConfigurationWithUrl, type OperationMode, type OverrideCreateSchema, type OverrideDeleteSchema, type OverrideRuleFilterSchema, type OverrideRuleQuerySchema, type OverrideRuleTagsSchema, type OverrideSchema, type OverridesRetrieveSchema, type PresetCreateSchema, type PresetDeleteSchema, type PresetSchema, type PresetsRetrieveSchema, SearchClient, type SearchOptions, type SearchParams, type SearchParamsWithPreset, type SearchResponse, type SearchResponseFacetCountSchema, type SearchResponseHighlight, type SearchResponseHit, type SearchResponseRequestParams, type SearchableDocuments, type StatsResponse, type StopwordCreateSchema, type StopwordDeleteSchema, type StopwordSchema, type StopwordsRetrieveSchema, type SynonymCreateSchema, type SynonymDeleteSchema, type SynonymSchema, type SynonymsRetrieveSchema, type UnionArrayKeys, type UnionArraySearchParams, type UpdateByFilterParameters, type UpdateByFilterResponse, type WriteableDocuments, arrayableParams }; +export default _default; +export type * from "./Typesense/Aliases"; +export type * from "./Typesense/AnalyticsEvent"; +export type * from "./Typesense/AnalyticsRule"; +export type * from "./Typesense/AnalyticsRules"; +export type * from "./Typesense/Collection"; +export type * from "./Typesense/Collections"; +export type * from "./Typesense/Configuration"; +export type * from "./Typesense/Conversations"; +export type * from "./Typesense/Conversation"; +export type * from "./Typesense/ConversationModel"; +export type * from "./Typesense/Debug"; +export type * from "./Typesense/Documents"; +export type * from "./Typesense/Health"; +export type * from "./Typesense/Key"; +export type * from "./Typesense/Keys"; +export type * from "./Typesense/Metrics"; +export type * from "./Typesense/MultiSearch"; +export type * from "./Typesense/Override"; +export type * from "./Typesense/Overrides"; +export type * from "./Typesense/Preset"; +export type * from "./Typesense/Presets"; +export type * from "./Typesense/Stats"; +export type * from "./Typesense/Stopword"; +export type * from "./Typesense/Stopwords"; +export type * from "./Typesense/Synonym"; +export type * from "./Typesense/Synonyms"; diff --git a/lib/Typesense.js b/lib/Typesense.js new file mode 100644 index 00000000..22556ae5 --- /dev/null +++ b/lib/Typesense.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Errors = exports.SearchClient = exports.Client = void 0; +var tslib_1 = require("tslib"); +var Client_1 = tslib_1.__importDefault(require("./Typesense/Client")); +exports.Client = Client_1.default; +var SearchClient_1 = tslib_1.__importDefault(require("./Typesense/SearchClient")); +exports.SearchClient = SearchClient_1.default; +var Errors = tslib_1.__importStar(require("./Typesense/Errors")); +exports.Errors = Errors; +exports.default = { Client: Client_1.default, SearchClient: SearchClient_1.default, Errors: Errors }; +//# sourceMappingURL=Typesense.js.map \ No newline at end of file diff --git a/lib/Typesense.js.map b/lib/Typesense.js.map new file mode 100644 index 00000000..10f3e223 --- /dev/null +++ b/lib/Typesense.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Typesense.js","sourceRoot":"","sources":["../src/Typesense.ts"],"names":[],"mappings":";;;;AAAA,sEAAwC;AAI/B,iBAJF,gBAAM,CAIE;AAHf,kFAAoD;AAGnC,uBAHV,sBAAY,CAGU;AAF7B,iEAA6C;AAEd,wBAAM;AACrC,kBAAe,EAAE,MAAM,kBAAA,EAAE,YAAY,wBAAA,EAAE,MAAM,QAAA,EAAE,CAAC"} \ No newline at end of file diff --git a/lib/Typesense.min.js.map b/lib/Typesense.min.js.map deleted file mode 100644 index 75d56cd2..00000000 --- a/lib/Typesense.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["/home/fanis/code/typesense/js-lib/lib/Typesense.min.js","node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/Alias.ts"],"names":["require_http","__commonJSMin","exports","module","require_https","require_crypto","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","httpBody","httpStatus","importResults","payload","Configuration","options","node","logger","key","array","i","j","import_http","import_https","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted"],"mappings":"AAAA,qxBAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCAjlB,IAAAA,EAAAA,CAAAC,EAAAA,CAAA,CAAAC,EAAAA,CAAAC,EAAAA,CAAAA,EAAA,CAAA,YAAA,CAAAA,EAAAA,CAAO,OAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CCAlB,IAAAC,EAAAA,CAAAH,EAAAA,CAAA,CAAAC,EAAAA,CAAAC,EAAAA,CAAAA,EAAA,CAAA,YAAA,CAAAA,EAAAA,CAAO,OAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CCAlB,IAAAE,EAAAA,CAAAJ,EAAAA,CAAA,CAAAC,EAAAA,CAAAC,EAAAA,CAAAA,EAAA,CAAA,YAAA,CAAAA,EAAAA,CAAO,OAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CCAlB,wFAAmB,ICAnBG,EAAAA,CAAA,CAAA,CAAA,CAAAC,EAAAA,CAAAD,EAAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,EAAAE,CAAAA,CAAA,WAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,yBAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,cAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,WAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAA,cAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAAA,CAAAA,CCAA,IAAqBA,CAAAA,CAArB,MAAA,QAA4C,KAAM,CAKhD,WAAA,CAAYC,CAAAA,CAAkBC,CAAAA,CAAmBC,CAAAA,CAAqB,CACpE,KAAA,CAAMF,CAAO,CAAA,CACb,IAAA,CAAK,IAAA,CAAO,GAAA,CAAA,MAAA,CAAW,IAAA,CACvB,IAAA,CAAK,QAAA,CAAWC,CAAAA,CAChB,IAAA,CAAK,UAAA,CAAaC,CAAAA,CAClB,MAAA,CAAO,cAAA,CAAe,IAAA,CAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAClD,CACF,CAAA,CCVA,IAAqBZ,CAAAA,CAArB,MAAA,QAAuCS,CAAe,CAAC,CAAA,CCAvD,IAAqBP,CAAAA,CAArB,MAAA,QAAuDO,CAAe,CAAC,CAAA,CCAvE,IAAqBN,CAAAA,CAArB,MAAA,QAAiDM,CAAe,CAAC,CAAA,CCAjE,IAAqBL,CAAAA,CAArB,MAAA,QAA4CK,CAAe,CAAC,CAAA,CCA5D,IAAqBJ,CAAAA,CAArB,MAAA,QAAiDI,CAAe,CAAC,CAAA,CCAjE,IAAqBH,CAAAA,CAArB,MAAA,QAA8CG,CAAe,CAAC,CAAA,CCA9D,IAAqBF,CAAAA,CAArB,MAAA,QAAiDE,CAAe,CAAC,CAAA,CCAjE,IAAqBD,CAAAA,CAArB,MAAA,QAAyCC,CAAe,CAAC,CAAA,CCSzD,IAAqBR,CAAAA,CAArB,MAAA,QAAyCQ,CAAe,CAGtD,WAAA,CACEC,CAAAA,CACAG,CAAAA,CACAC,CAAAA,CACA,CACA,KAAA,CAAMJ,CAAO,CAAA,CACb,IAAA,CAAK,aAAA,CAAgBG,CAAAA,CACrB,IAAA,CAAK,OAAA,CAAUC,CACjB,CACF,CAAA,CXwFA,IAAqBC,CAAAA,CAArB,KAAmC,CAyBjC,WAAA,CAAYC,CAAAA,CAA+B,CACzC,IAAA,CAAK,KAAA,CAAQA,CAAAA,CAAQ,KAAA,EAAS,CAAC,CAAA,CAC/B,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,KAAA,CACf,GAAA,CAAKC,CAAAA,EAAS,IAAA,CAAK,oBAAA,CAAqBA,CAAI,CAAC,CAAA,CAC7C,GAAA,CAAKA,CAAAA,EAAS,IAAA,CAAK,oBAAA,CAAqBA,CAAI,CAAC,CAAA,CAC7C,GAAA,CAAKA,CAAAA,EAAAA,CAAU,CAAE,GAAGA,CAAK,CAAA,CAAE,CAAA,CAE1BD,CAAAA,CAAQ,cAAA,EAAkB,IAAA,EAAA,CAC5BA,CAAAA,CAAQ,cAAA,CAAiB,CAAA,CAAA,CAAA,CAGvBA,CAAAA,CAAQ,cAAA,GAAmB,CAAA,CAAA,EAC7B,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA,CAG9B,IAAA,CAAK,WAAA,CAAcA,CAAAA,CAAQ,WAAA,CAC3B,IAAA,CAAK,WAAA,CAAc,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,WAAW,CAAA,CAC7D,IAAA,CAAK,WAAA,CAAc,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,WAAW,CAAA,CAE7D,IAAA,CAAK,wBAAA,CACHA,CAAAA,CAAQ,wBAAA,EAA4BA,CAAAA,CAAQ,cAAA,EAAkB,CAAA,CAChE,IAAA,CAAK,0BAAA,CAA6BA,CAAAA,CAAQ,0BAAA,EAA8B,EAAA,CACxE,IAAA,CAAK,UAAA,CAAA,CACFA,CAAAA,CAAQ,UAAA,GAAe,KAAA,CAAA,EAAaA,CAAAA,CAAQ,UAAA,EAAc,CAAA,CACvDA,CAAAA,CAAQ,UAAA,CACR,IAAA,CAAK,KAAA,CAAM,MAAA,CAAA,CAAU,IAAA,CAAK,WAAA,EAAe,IAAA,CAAO,CAAA,CAAI,CAAA,CAAA,CAAA,EAAO,CAAA,CACjE,IAAA,CAAK,oBAAA,CAAuBA,CAAAA,CAAQ,oBAAA,EAAwB,EAAA,CAE5D,IAAA,CAAK,MAAA,CAASA,CAAAA,CAAQ,MAAA,CACtB,IAAA,CAAK,sBAAA,CAAyBA,CAAAA,CAAQ,sBAAA,CAEtC,IAAA,CAAK,4BAAA,CACHA,CAAAA,CAAQ,4BAAA,EAAgC,CAAA,CAC1C,IAAA,CAAK,wBAAA,CAA2BA,CAAAA,CAAQ,wBAAA,EAA4B,CAAA,CAAA,CAEpE,IAAA,CAAK,YAAA,CAAeA,CAAAA,CAAQ,YAAA,CAC5B,IAAA,CAAK,MAAA,CAASA,CAAAA,CAAQ,MAAA,EAAUE,kBAAAA,CAChC,IAAA,CAAK,QAAA,CAAWF,CAAAA,CAAQ,QAAA,EAAY,MAAA,CACpC,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,CAElC,IAAA,CAAK,iBAAA,CAAoBA,CAAAA,CAAQ,iBAAA,CAEjC,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAQ,SAAA,CACzB,IAAA,CAAK,UAAA,CAAaA,CAAAA,CAAQ,UAAA,CAE1B,IAAA,CAAK,gBAAA,CAAmBA,CAAAA,CAAQ,gBAAA,CAEhC,IAAA,CAAK,uBAAA,CAAwBA,CAAO,CAAA,CACpC,IAAA,CAAK,QAAA,CAAS,CAChB,CAEA,QAAA,CAAA,CAAoB,CAClB,EAAA,CAAI,IAAA,CAAK,KAAA,EAAS,IAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,GAAW,CAAA,EAAK,IAAA,CAAK,aAAA,CAAc,CAAA,CACtE,MAAM,IAAId,CAAAA,CACR,qEACF,CAAA,CAGF,EAAA,CACE,IAAA,CAAK,WAAA,EAAe,IAAA,EACpB,IAAA,CAAK,0BAAA,CAA2B,IAAA,CAAK,WAAW,CAAA,CAEhD,MAAM,IAAIA,CAAAA,CACR,oFACF,CAAA,CAGF,EAAA,CAAI,IAAA,CAAK,MAAA,EAAU,IAAA,CACjB,MAAM,IAAIA,CAAAA,CAA0B,2BAA2B,CAAA,CAGjE,MAAO,CAAA,CACT,CAEQ,aAAA,CAAA,CAAyB,CAC/B,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAMe,CAAAA,EACf,IAAA,CAAK,0BAAA,CAA2BA,CAAI,CAC5C,CACH,CAEQ,0BAAA,CACNA,CAAAA,CAIS,CACT,MACE,CAAC,CAAC,UAAA,CAAY,MAAA,CAAQ,MAAA,CAAQ,MAAM,CAAA,CAAE,KAAA,CAAOE,CAAAA,EACpCF,CAAAA,CAAK,cAAA,CAAeE,CAAG,CAC/B,CAAA,EAAKF,CAAAA,CAAK,GAAA,EAAU,IAEzB,CAEQ,oBAAA,CACNA,CAAAA,CASY,CACZ,OAAIA,CAAAA,EAAQ,IAAA,EAAQ,CAACA,CAAAA,CAAK,cAAA,CAAe,MAAM,CAAA,EAAA,CAC7CA,CAAAA,CAAK,IAAA,CAAU,EAAA,CAAA,CAEVA,CACT,CAEQ,oBAAA,CACNA,CAAAA,CASY,CACZ,EAAA,CACEA,CAAAA,EAAQ,IAAA,EACR,CAACA,CAAAA,CAAK,cAAA,CAAe,MAAM,CAAA,EAC3BA,CAAAA,CAAK,cAAA,CAAe,UAAU,CAAA,CAE9B,MAAA,CAAQA,CAAAA,CAAK,QAAA,CAAa,CACxB,IAAK,OAAA,CACHA,CAAAA,CAAK,IAAA,CAAU,GAAA,CACf,KAAA,CACF,IAAK,MAAA,CACHA,CAAAA,CAAK,IAAA,CAAU,EAAA,CACf,KACJ,CAEF,OAAOA,CACT,CAEQ,uBAAA,CAAwBD,CAAAA,CAAqC,CAC/DA,CAAAA,CAAQ,cAAA,EACV,IAAA,CAAK,MAAA,CAAO,IAAA,CACV,gFACF,CAAA,CAEEA,CAAAA,CAAQ,UAAA,EACV,IAAA,CAAK,MAAA,CAAO,IAAA,CACV,oGACF,CAAA,CAEEA,CAAAA,CAAQ,gBAAA,EACV,IAAA,CAAK,MAAA,CAAO,IAAA,CACV,0GACF,CAEJ,CAEQ,YAAA,CAAaI,CAAAA,CAAO,CAC1B,GAAA,CAAA,IAASC,CAAAA,CAAID,CAAAA,CAAM,MAAA,CAAS,CAAA,CAAGC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,EAAAA,CAAK,CACzC,IAAMC,CAAAA,CAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,CAAA,CAAA,CAAKD,CAAAA,CAAI,CAAA,CAAE,CAAA,CAC5C,CAACD,CAAAA,CAAMC,CAAC,CAAA,CAAGD,CAAAA,CAAME,CAAC,CAAC,CAAA,CAAI,CAACF,CAAAA,CAAME,CAAC,CAAA,CAAGF,CAAAA,CAAMC,CAAC,CAAC,CAC5C,CACF,CACF,CAAA,CYnSA,IAAAE,EAAAA,CAAmC,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CACnCC,EAAAA,CAAoC,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAFpC,4EAAkB,IAgBZC,EAAAA,CAAmB,qBAAA,CACnBC,EAAAA,CAAU,CAAA,CAAA,CACVC,EAAAA,CAAY,CAAA,CAAA,CAOZC,EAAAA,CACJ,OAAO,OAAA,CAAY,GAAA,EACnB,OAAA,CAAQ,QAAA,EAAY,IAAA,EACpB,OAAA,CAAQ,QAAA,CAAS,IAAA,EAAQ,IAAA,CAENC,CAAAA,CAArB,KAA6B,CAc3B,WAAA,CAAoBC,CAAAA,CAA8B,CAA9B,IAAA,CAAA,aAAA,CAAAA,CAAAA,CAClB,IAAA,CAAK,MAAA,CAAS,IAAA,CAAK,aAAA,CAAc,MAAA,CACjC,IAAA,CAAK,KAAA,CACH,IAAA,CAAK,aAAA,CAAc,KAAA,EAAS,IAAA,CACxB,IAAA,CAAK,aAAA,CAAc,KAAA,CACnB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,aAAA,CAAc,KAAK,CAAC,CAAA,CACzD,IAAA,CAAK,WAAA,CACH,IAAA,CAAK,aAAA,CAAc,WAAA,EAAe,IAAA,CAC9B,IAAA,CAAK,aAAA,CAAc,WAAA,CACnB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,aAAA,CAAc,WAAW,CAAC,CAAA,CAC/D,IAAA,CAAK,wBAAA,CAA2B,IAAA,CAAK,aAAA,CAAc,wBAAA,CACnD,IAAA,CAAK,0BAAA,CACH,IAAA,CAAK,aAAA,CAAc,0BAAA,CACrB,IAAA,CAAK,oBAAA,CAAuB,IAAA,CAAK,aAAA,CAAc,UAAA,CAC/C,IAAA,CAAK,oBAAA,CAAuB,IAAA,CAAK,aAAA,CAAc,oBAAA,CAC/C,IAAA,CAAK,sBAAA,CAAyB,IAAA,CAAK,aAAA,CAAc,sBAAA,CACjD,IAAA,CAAK,qBAAA,CAAwB,IAAA,CAAK,aAAA,CAAc,iBAAA,CAEhD,IAAA,CAAK,MAAA,CAAS,IAAA,CAAK,aAAA,CAAc,MAAA,CAEjC,IAAA,CAAK,0BAAA,CAA2B,CAAA,CAChC,IAAA,CAAK,gBAAA,CAAmB,CAAA,CAC1B,CAEA,MAAM,GAAA,CACJC,CAAAA,CACAC,CAAAA,CAAuB,CAAC,CAAA,CACxB,CACE,WAAA,CAAAC,CAAAA,CAAc,IAAA,CACd,YAAA,CAAAC,CAAAA,CAAe,KAAA,CACjB,CAAA,CAGI,CAAC,CAAA,CACO,CACZ,OAAO,IAAA,CAAK,cAAA,CAAkB,KAAA,CAAOH,CAAAA,CAAU,CAC7C,eAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CACF,CAAC,CACH,CAEA,MAAM,MAAA,CAAUH,CAAAA,CAAkBC,CAAAA,CAAuB,CAAC,CAAA,CAAe,CACvE,OAAO,IAAA,CAAK,cAAA,CAAkB,QAAA,CAAUD,CAAAA,CAAU,CAAE,eAAA,CAAAC,CAAgB,CAAC,CACvE,CAEA,MAAM,IAAA,CACJD,CAAAA,CACAI,CAAAA,CAAsB,CAAC,CAAA,CACvBH,CAAAA,CAAuB,CAAC,CAAA,CACxBI,CAAAA,CAAyB,CAAC,CAAA,CACd,CACZ,OAAO,IAAA,CAAK,cAAA,CAAkB,MAAA,CAAQL,CAAAA,CAAU,CAC9C,eAAA,CAAAC,CAAAA,CACA,cAAA,CAAAG,CAAAA,CACA,iBAAA,CAAAC,CACF,CAAC,CACH,CAEA,MAAM,GAAA,CACJL,CAAAA,CACAI,CAAAA,CAAsB,CAAC,CAAA,CACvBH,CAAAA,CAAuB,CAAC,CAAA,CACZ,CACZ,OAAO,IAAA,CAAK,cAAA,CAAkB,KAAA,CAAOD,CAAAA,CAAU,CAC7C,eAAA,CAAAC,CAAAA,CACA,cAAA,CAAAG,CACF,CAAC,CACH,CAEA,MAAM,KAAA,CACJJ,CAAAA,CACAI,CAAAA,CAAsB,CAAC,CAAA,CACvBH,CAAAA,CAAuB,CAAC,CAAA,CACZ,CACZ,OAAO,IAAA,CAAK,cAAA,CAAkB,OAAA,CAASD,CAAAA,CAAU,CAC/C,eAAA,CAAAC,CAAAA,CACA,cAAA,CAAAG,CACF,CAAC,CACH,CAEQ,UAAA,CAAA,CAAuC,CAC7C,OAAK,IAAA,CAAK,aAAA,CAAc,YAAA,CAEpB,OAAO,IAAA,CAAK,aAAA,CAAc,YAAA,EAAiB,UAAA,CACtC,IAAA,CAAK,aAAA,CAAc,YAAA,CAG1B,OAAO,SAAA,CAAc,GAAA,EACrB,SAAA,CAAU,SAAA,GAAc,oBAAA,CAGtBE,eAAAA,CAAM,UAAA,CAAW,IAAA,CAAK,aAAA,CAAc,YAAY,CAAA,CAAE,IAAA,CAAK,UAAU,CAAA,CACjEA,eAAAA,CAAM,UAAA,CAAW,IAAA,CAAK,aAAA,CAAc,YAAY,CAAA,CAXd,KAAA,CAYxC,CAEA,MAAM,cAAA,CACJC,CAAAA,CACAP,CAAAA,CACA,CACE,eAAA,CAAAC,CAAAA,CAAkB,IAAA,CAClB,cAAA,CAAAG,CAAAA,CAAiB,IAAA,CACjB,iBAAA,CAAAC,CAAAA,CAAoB,CAAC,CAAA,CACrB,WAAA,CAAAH,CAAAA,CAAc,IAAA,CACd,YAAA,CAAAC,CAAAA,CAAe,KAAA,CAAA,CACf,qBAAA,CAAAK,CAAAA,CAAwB,CAAA,CAAA,CACxB,eAAA,CAAAC,CAAAA,CAAkB,KAAA,CACpB,CAAA,CASY,CACZ,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,CAAA,CAE5B,IAAMC,CAAAA,CAAgB,IAAA,CAAK,GAAA,CAAI,CAAA,CAC3BC,CAAAA,CACAC,CAAAA,CAAa,CAAA,CAAA,CACjB,IAAA,CAAK,MAAA,CAAO,KAAA,CACV,CAAA,SAAA,EAAYF,CAAa,CAAA,aAAA,EAAgBH,CAAAA,CAAY,WAAA,CAAY,CAAC,CAAA,UAAA,EAAaP,CAAQ,CAAA,CAAA;ACmO3D;AAAA;AAAA;AAAA;AA4BnB,UAAA;AA+CF;AC7cH","file":"/home/fanis/code/typesense/js-lib/lib/Typesense.min.js","sourcesContent":[null,"module.exports = {}","module.exports = {}","module.exports = {}","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n"]} \ No newline at end of file diff --git a/lib/Typesense.min.mjs b/lib/Typesense.min.mjs deleted file mode 100644 index c303ec55..00000000 --- a/lib/Typesense.min.mjs +++ /dev/null @@ -1,9 +0,0 @@ -var Ke=Object.create;var fe=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var ye=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ze=(r,e)=>{for(var t in e)fe(r,t,{get:e[t],enumerable:!0})},Le=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of We(e))!je.call(r,s)&&s!==t&&fe(r,s,{get:()=>e[s],enumerable:!(i=Me(e,s))||i.enumerable});return r};var ge=(r,e,t)=>(t=r!=null?Ke(Fe(r)):{},Le(e||!r||!r.__esModule?fe(t,"default",{value:r,enumerable:!0}):t,r));var _e=ye((jt,xe)=>{"use strict";xe.exports={}});var be=ye((zt,Ae)=>{"use strict";Ae.exports={}});var $e=ye((Yr,He)=>{"use strict";He.exports={}});import Qe from"loglevel";var Re={};ze(Re,{HTTPError:()=>R,ImportError:()=>g,MissingConfigurationError:()=>f,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>y,ObjectUnprocessable:()=>_,RequestMalformed:()=>A,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype)}};var R=class extends l{};var f=class extends l{};var x=class extends l{};var y=class extends l{};var _=class extends l{};var A=class extends l{};var b=class extends l{};var T=class extends l{};var g=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==void 0&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||Qe,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new f("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new f("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new f("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}};var Ee=ge(_e()),we=ge(be());import pe from"axios";var Je="X-TYPESENSE-API-KEY",Ce=!0,Be=!1,Te=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:i=null,responseType:s=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:s})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},s={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:s})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?pe.getAdapter(this.configuration.axiosAdapter).bind(globalThis):pe.getAdapter(this.configuration.axiosAdapter):void 0}async performRequest(e,t,{queryParameters:i=null,bodyParameters:s=null,additionalHeaders:n={},abortSignal:a=null,responseType:h=void 0,skipConnectionTimeout:m=!1,enableKeepAlive:C=void 0}){this.configuration.validate();let c=Date.now(),S,F=!1;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),n,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:j=>j>0,transformResponse:[(j,z)=>{let Pe=j;return z!==void 0&&typeof j=="string"&&z["content-type"]&&z["content-type"].startsWith("application/json")&&(Pe=JSON.parse(j)),Pe}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new Ee.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Te?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new we.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),s&&(typeof s=="string"&&s.length!==0||typeof s=="object"&&Object.keys(s).length!==0)&&(o.data=s),a){let z=pe.CancelToken.source();Q=()=>{F=!0,z.cancel()},a.addEventListener("abort",Q),o.cancelToken=z.token}let d=await pe(o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Ce),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,d.data?.message,o.data));throw this.customErrorForResponse(d,d.data?.message,o.data)}catch(o){if(F||this.setNodeHealthcheck(P,Be),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${o?.code??""} ${o.message}${o.response==null?"":" - "+JSON.stringify(o.response?.data)}"`),F)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Ce)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Ce)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Je]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let s=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(s+=` | Server said: ${t}`);let n=new l(s,i,e.status);return e.status===400?n=new A(s):e.status===401?n=new b(s):e.status===404?n=new y(s):e.status===409?n=new x(s):e.status===422?n=new _(s):e.status>=500&&e.status<=599?n=new T(s):n=new R(s),n}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,i,s){let{cacheResponseForSeconds:n=120,maxSize:a=100}=s;if(n<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o)}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o)}return v}};var Se="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(Se,e,t)}async retrieve(e={}){return this.apiCall.get(Se,e)}static get RESOURCEPATH(){return Se}};var Oe="/documents",L=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);let n=u(e),a=Object.assign({},s,n);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Oe}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Oe}};var ve={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},Ne=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,N=class extends L{constructor(e,t,i){super(e,t,i)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(n=>JSON.stringify(n)).join(` -`)}catch(n){throw n instanceof RangeError&&n.message.includes("Too many properties to enumerate")?new Error(`${n} - It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object - - Please try reducing the number of keys in your document, or using CURL to import your data. - `):new Error(n)}else i=e;let s=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne});if(Array.isArray(e)){let n=s.split(` -`).map(h=>JSON.parse(h)),a=n.filter(h=>h.success===!1);if(a.length>0)throw new g(`${n.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:n.length-a.length});return n}else return s}async importStream(e,t={}){let s=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!Ne})).split(` -`).map(a=>JSON.parse(a)),n=s.filter(a=>a.success===!1);if(n.length>0)throw new g(`${s.length-n.length} documents imported successfully, ${n.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:e,options:t,failedItems:n,successCount:s.length-n.length});return s}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function De(r){return Object.keys(ve).filter(e=>r[e]!==void 0).every(e=>Ve(r[e]))}function u(r){let e={...r};if(!Object.keys(ve).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&De(e))return e;if(!De(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Ve(r){return!Array.isArray(r)}var Ye="/multi_search",D=class{constructor(e,t,i=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let s={};this.useTextContentType&&(s["content-type"]="text/plain");let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let a={...t,...n},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ye,h,m,s],{cacheResponseForSeconds:i})}};var me=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new L(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var de=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new D(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new me(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var Ge="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ge}};var J=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var Xe="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return Xe}};var B=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var he=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${N.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var V=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new N(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof y)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new he(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new J(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new B(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ue="/aliases",$=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(Ue)}endpointPath(e){return`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return Ue}};var Y=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Ie=ge($e());var qe="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(qe)}generateScopedSearchKey(e,t){let i=u(t),s=JSON.stringify(i),n=Buffer.from((0,Ie.createHmac)("sha256",e).update(s).digest("base64")),a=e.substr(0,4),h=`${n}${a}${s}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var Ze="/debug",X=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(Ze)}};var et="/metrics.json",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(et)}};var tt="/stats.json",ee=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(tt)}};var rt="/health",te=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(rt)}};var it="/operations",re=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${it}/${e}`,{},t)}};var st="/presets",I=class r{constructor(e){this.apiCall=e}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let s=t.value.searches.map(n=>u(n));return this.apiCall.put(this.endpointPath(e),{value:{searches:s}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return st}};var ie=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var nt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return nt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ot="/analytics/events",ne=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ot}};var at="/analytics",oe=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new ne(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return at}};var lt="/stopwords",K=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var ae=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var ct="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var le=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ke="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall)}async retrieve(){return this.apiCall.get(ke)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new le(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return ke}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ue=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new X(this.apiCall),this.metrics=new Z(this.apiCall),this.stats=new ee(this.apiCall),this.health=new te(this.apiCall),this.operations=new re(this.apiCall),this.multiSearch=new D(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new oe(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new V(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new Y(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new G(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new ie(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new ae(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new ce(e,this.apiCall)),this.individualConversations[e])}};export{ue as Client,Re as Errors,de as SearchClient}; -//# sourceMappingURL=Typesense.min.mjs.map \ No newline at end of file diff --git a/lib/Typesense.min.mjs.map b/lib/Typesense.min.mjs.map deleted file mode 100644 index 9f18da6b..00000000 --- a/lib/Typesense.min.mjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/Collections.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Utils.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/Client.ts"],"sourcesContent":["module.exports = {}","module.exports = {}","module.exports = {}","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport interface DeleteQuery {\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n}\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n operationName: \"vote\" | \"snapshot\" | \"cache/clear\" | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"],"mappings":"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","names":["require_http","__commonJSMin","exports","module","require_https","__commonJSMin","exports","module","require_crypto","__commonJSMin","exports","module","logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","httpBody","httpStatus","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","payload","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","import_http","import_https","axios","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","HTTPAgent","HTTPSAgent","source","response","error","candidateNode","isDueForHealthcheck","i","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","httpBody","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","Collections","apiCall","schema","options","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","normalizedParams","normalizeArrayableParams","queryParams","operation","Collections","arrayableParams","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","hasNoArrayValues","params","arrayableParams","key","isNonArrayValue","normalizeArrayableParams","result","value","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","normalizedSearchRequests","normalizeArrayableParams","normalizedQueryParams","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","options","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","import_crypto","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","normalizedParams","normalizeArrayableParams","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","normalizedParams","search","normalizeArrayableParams","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation"]} \ No newline at end of file diff --git a/lib/Typesense/Alias.d.ts b/lib/Typesense/Alias.d.ts new file mode 100644 index 00000000..6e36a7d3 --- /dev/null +++ b/lib/Typesense/Alias.d.ts @@ -0,0 +1,10 @@ +import { CollectionAliasSchema } from "./Aliases"; +import ApiCall from "./ApiCall"; +export default class Alias { + private name; + private apiCall; + constructor(name: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} diff --git a/lib/Typesense/Alias.js b/lib/Typesense/Alias.js new file mode 100644 index 00000000..08cb130a --- /dev/null +++ b/lib/Typesense/Alias.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Aliases_1 = tslib_1.__importDefault(require("./Aliases")); +var Alias = /** @class */ (function () { + function Alias(name, apiCall) { + this.name = name; + this.apiCall = apiCall; + } + Alias.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Alias.prototype.delete = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; + }); + }); + }; + Alias.prototype.endpointPath = function () { + return "".concat(Aliases_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.name)); + }; + return Alias; +}()); +exports.default = Alias; +//# sourceMappingURL=Alias.js.map \ No newline at end of file diff --git a/lib/Typesense/Alias.js.map b/lib/Typesense/Alias.js.map new file mode 100644 index 00000000..03fa9442 --- /dev/null +++ b/lib/Typesense/Alias.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Alias.js","sourceRoot":"","sources":["../../src/Typesense/Alias.ts"],"names":[],"mappings":";;;AAAA,8DAA2D;AAG3D;IACE,eAAoB,IAAY,EAAU,OAAgB;QAAtC,SAAI,GAAJ,IAAI,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExD,wBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACrE;IAEK,sBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAwB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACxE;IAEO,4BAAY,GAApB;QACE,OAAO,UAAG,iBAAO,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC;IACpE,CAAC;IACH,YAAC;AAAD,CAAC,AAdD,IAcC"} \ No newline at end of file diff --git a/lib/Typesense/Aliases.d.ts b/lib/Typesense/Aliases.d.ts new file mode 100644 index 00000000..aad02136 --- /dev/null +++ b/lib/Typesense/Aliases.d.ts @@ -0,0 +1,18 @@ +import ApiCall from "./ApiCall"; +export interface CollectionAliasCreateSchema { + collection_name: string; +} +export interface CollectionAliasSchema extends CollectionAliasCreateSchema { + name: string; +} +export interface CollectionAliasesResponseSchema { + aliases: CollectionAliasSchema[]; +} +export default class Aliases { + private apiCall; + constructor(apiCall: ApiCall); + upsert(name: string, mapping: CollectionAliasCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/Aliases.js b/lib/Typesense/Aliases.js new file mode 100644 index 00000000..ac647bc9 --- /dev/null +++ b/lib/Typesense/Aliases.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RESOURCEPATH = "/aliases"; +var Aliases = /** @class */ (function () { + function Aliases(apiCall) { + this.apiCall = apiCall; + } + Aliases.prototype.upsert = function (name, mapping) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.put(this.endpointPath(name), mapping)]; + }); + }); + }; + Aliases.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; + }); + }); + }; + Aliases.prototype.endpointPath = function (aliasName) { + return "".concat(Aliases.RESOURCEPATH, "/").concat(encodeURIComponent(aliasName)); + }; + Object.defineProperty(Aliases, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return Aliases; +}()); +exports.default = Aliases; +//# sourceMappingURL=Aliases.js.map \ No newline at end of file diff --git a/lib/Typesense/Aliases.js.map b/lib/Typesense/Aliases.js.map new file mode 100644 index 00000000..9b3a301a --- /dev/null +++ b/lib/Typesense/Aliases.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Aliases.js","sourceRoot":"","sources":["../../src/Typesense/Aliases.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,UAAU,CAAC;AAchC;IACE,iBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,wBAAM,GAAZ,UACE,IAAY,EACZ,OAAoC;;;gBAEpC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EACvB,OAAO,CACR,EAAC;;;KACH;IAEK,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAkC,YAAY,CAAC,EAAC;;;KACxE;IAEO,8BAAY,GAApB,UAAqB,SAAS;QAC5B,OAAO,UAAG,OAAO,CAAC,YAAY,cAAI,kBAAkB,CAAC,SAAS,CAAC,CAAE,CAAC;IACpE,CAAC;IAED,sBAAW,uBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,cAAC;AAAD,CAAC,AAxBD,IAwBC"} \ No newline at end of file diff --git a/lib/Typesense/Analytics.d.ts b/lib/Typesense/Analytics.d.ts new file mode 100644 index 00000000..14c1fc56 --- /dev/null +++ b/lib/Typesense/Analytics.d.ts @@ -0,0 +1,15 @@ +import ApiCall from "./ApiCall"; +import AnalyticsRules from "./AnalyticsRules"; +import AnalyticsRule from "./AnalyticsRule"; +import AnalyticsEvents from "./AnalyticsEvents"; +export default class Analytics { + private readonly apiCall; + private readonly _analyticsRules; + private readonly individualAnalyticsRules; + private readonly _analyticsEvents; + constructor(apiCall: ApiCall); + rules(): AnalyticsRules; + rules(id: string): AnalyticsRule; + events(): AnalyticsEvents; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/Analytics.js b/lib/Typesense/Analytics.js new file mode 100644 index 00000000..620f3bfb --- /dev/null +++ b/lib/Typesense/Analytics.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var AnalyticsRules_1 = tslib_1.__importDefault(require("./AnalyticsRules")); +var AnalyticsRule_1 = tslib_1.__importDefault(require("./AnalyticsRule")); +var AnalyticsEvents_1 = tslib_1.__importDefault(require("./AnalyticsEvents")); +var RESOURCEPATH = "/analytics"; +var Analytics = /** @class */ (function () { + function Analytics(apiCall) { + this.apiCall = apiCall; + this.individualAnalyticsRules = {}; + this.apiCall = apiCall; + this._analyticsRules = new AnalyticsRules_1.default(this.apiCall); + this._analyticsEvents = new AnalyticsEvents_1.default(this.apiCall); + } + Analytics.prototype.rules = function (id) { + if (id === undefined) { + return this._analyticsRules; + } + else { + if (this.individualAnalyticsRules[id] === undefined) { + this.individualAnalyticsRules[id] = new AnalyticsRule_1.default(id, this.apiCall); + } + return this.individualAnalyticsRules[id]; + } + }; + Analytics.prototype.events = function () { + return this._analyticsEvents; + }; + Object.defineProperty(Analytics, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return Analytics; +}()); +exports.default = Analytics; +//# sourceMappingURL=Analytics.js.map \ No newline at end of file diff --git a/lib/Typesense/Analytics.js.map b/lib/Typesense/Analytics.js.map new file mode 100644 index 00000000..dd57042d --- /dev/null +++ b/lib/Typesense/Analytics.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Analytics.js","sourceRoot":"","sources":["../../src/Typesense/Analytics.ts"],"names":[],"mappings":";;;AACA,4EAA8C;AAC9C,0EAA4C;AAC5C,8EAAgD;AAEhD,IAAM,YAAY,GAAG,YAAY,CAAC;AAElC;IAKE,mBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAH5B,6BAAwB,GAAkC,EAAE,CAAC;QAI5E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,wBAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,GAAG,IAAI,yBAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAID,yBAAK,GAAL,UAAM,EAAW;QACf,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBACpD,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,GAAG,IAAI,uBAAa,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,0BAAM,GAAN;QACE,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,sBAAW,yBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,gBAAC;AAAD,CAAC,AA/BD,IA+BC"} \ No newline at end of file diff --git a/lib/Typesense/AnalyticsEvent.d.ts b/lib/Typesense/AnalyticsEvent.d.ts new file mode 100644 index 00000000..52f9905f --- /dev/null +++ b/lib/Typesense/AnalyticsEvent.d.ts @@ -0,0 +1,5 @@ +export interface AnalyticsEventCreateSchema { + type: string; + name: string; + data: Record; +} diff --git a/lib/Typesense/AnalyticsEvent.js b/lib/Typesense/AnalyticsEvent.js new file mode 100644 index 00000000..6c827326 --- /dev/null +++ b/lib/Typesense/AnalyticsEvent.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=AnalyticsEvent.js.map \ No newline at end of file diff --git a/lib/Typesense/AnalyticsEvent.js.map b/lib/Typesense/AnalyticsEvent.js.map new file mode 100644 index 00000000..df36680c --- /dev/null +++ b/lib/Typesense/AnalyticsEvent.js.map @@ -0,0 +1 @@ +{"version":3,"file":"AnalyticsEvent.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsEvent.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/lib/Typesense/AnalyticsEvents.d.ts b/lib/Typesense/AnalyticsEvents.d.ts new file mode 100644 index 00000000..98157081 --- /dev/null +++ b/lib/Typesense/AnalyticsEvents.d.ts @@ -0,0 +1,9 @@ +import ApiCall from "./ApiCall"; +import { AnalyticsEventCreateSchema } from "./AnalyticsEvent"; +export default class AnalyticsEvents { + private readonly apiCall; + constructor(apiCall: ApiCall); + create(params: AnalyticsEventCreateSchema): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/AnalyticsEvents.js b/lib/Typesense/AnalyticsEvents.js new file mode 100644 index 00000000..9f8691a7 --- /dev/null +++ b/lib/Typesense/AnalyticsEvents.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RESOURCEPATH = "/analytics/events"; +var AnalyticsEvents = /** @class */ (function () { + function AnalyticsEvents(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + AnalyticsEvents.prototype.create = function (params) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.post(this.endpointPath(), params)]; + }); + }); + }; + AnalyticsEvents.prototype.endpointPath = function (operation) { + return "".concat(AnalyticsEvents.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); + }; + Object.defineProperty(AnalyticsEvents, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return AnalyticsEvents; +}()); +exports.default = AnalyticsEvents; +//# sourceMappingURL=AnalyticsEvents.js.map \ No newline at end of file diff --git a/lib/Typesense/AnalyticsEvents.js.map b/lib/Typesense/AnalyticsEvents.js.map new file mode 100644 index 00000000..12348751 --- /dev/null +++ b/lib/Typesense/AnalyticsEvents.js.map @@ -0,0 +1 @@ +{"version":3,"file":"AnalyticsEvents.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsEvents.ts"],"names":[],"mappings":";;;AAGA,IAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC;IACE,yBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,gCAAM,GAAZ,UACE,MAAkC;;;gBAElC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,EAAC;;;KACH;IAEO,sCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,eAAe,CAAC,YAAY,SACpC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,+BAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,sBAAC;AAAD,CAAC,AAvBD,IAuBC"} \ No newline at end of file diff --git a/lib/Typesense/AnalyticsRule.d.ts b/lib/Typesense/AnalyticsRule.d.ts new file mode 100644 index 00000000..2388ba9d --- /dev/null +++ b/lib/Typesense/AnalyticsRule.d.ts @@ -0,0 +1,35 @@ +import ApiCall from "./ApiCall"; +export interface AnalyticsRuleCreateSchema { + type: "popular_queries" | "nohits_queries" | "counter"; + params: { + enable_auto_aggregation?: boolean; + source: { + collections: string[]; + events?: Array<{ + type: string; + weight: number; + name: string; + }>; + }; + expand_query?: boolean; + destination: { + collection: string; + counter_field?: string; + }; + limit?: number; + }; +} +export interface AnalyticsRuleDeleteSchema { + name: string; +} +export interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema { + name: string; +} +export default class AnalyticsRule { + private name; + private apiCall; + constructor(name: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} diff --git a/lib/Typesense/AnalyticsRule.js b/lib/Typesense/AnalyticsRule.js new file mode 100644 index 00000000..7155fe00 --- /dev/null +++ b/lib/Typesense/AnalyticsRule.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var AnalyticsRules_1 = tslib_1.__importDefault(require("./AnalyticsRules")); +var AnalyticsRule = /** @class */ (function () { + function AnalyticsRule(name, apiCall) { + this.name = name; + this.apiCall = apiCall; + } + AnalyticsRule.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + AnalyticsRule.prototype.delete = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; + }); + }); + }; + AnalyticsRule.prototype.endpointPath = function () { + return "".concat(AnalyticsRules_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.name)); + }; + return AnalyticsRule; +}()); +exports.default = AnalyticsRule; +//# sourceMappingURL=AnalyticsRule.js.map \ No newline at end of file diff --git a/lib/Typesense/AnalyticsRule.js.map b/lib/Typesense/AnalyticsRule.js.map new file mode 100644 index 00000000..215fe372 --- /dev/null +++ b/lib/Typesense/AnalyticsRule.js.map @@ -0,0 +1 @@ +{"version":3,"file":"AnalyticsRule.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsRule.ts"],"names":[],"mappings":";;;AACA,4EAA8C;AA+B9C;IACE,uBACU,IAAY,EACZ,OAAgB;QADhB,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,gCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAsB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACnE;IAEK,8BAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAA4B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC5E;IAEO,oCAAY,GAApB;QACE,OAAO,UAAG,wBAAc,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC;IAC3E,CAAC;IACH,oBAAC;AAAD,CAAC,AAjBD,IAiBC"} \ No newline at end of file diff --git a/lib/Typesense/AnalyticsRules.d.ts b/lib/Typesense/AnalyticsRules.d.ts new file mode 100644 index 00000000..5ac34f01 --- /dev/null +++ b/lib/Typesense/AnalyticsRules.d.ts @@ -0,0 +1,13 @@ +import ApiCall from "./ApiCall"; +import { AnalyticsRuleCreateSchema, AnalyticsRuleSchema } from "./AnalyticsRule"; +export interface AnalyticsRulesRetrieveSchema { + rules: AnalyticsRuleSchema[]; +} +export default class AnalyticsRules { + private readonly apiCall; + constructor(apiCall: ApiCall); + upsert(name: string, params: AnalyticsRuleCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/AnalyticsRules.js b/lib/Typesense/AnalyticsRules.js new file mode 100644 index 00000000..a4d8b9d4 --- /dev/null +++ b/lib/Typesense/AnalyticsRules.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RESOURCEPATH = "/analytics/rules"; +var AnalyticsRules = /** @class */ (function () { + function AnalyticsRules(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + AnalyticsRules.prototype.upsert = function (name, params) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.put(this.endpointPath(name), params)]; + }); + }); + }; + AnalyticsRules.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + AnalyticsRules.prototype.endpointPath = function (operation) { + return "".concat(AnalyticsRules.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); + }; + Object.defineProperty(AnalyticsRules, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return AnalyticsRules; +}()); +exports.default = AnalyticsRules; +//# sourceMappingURL=AnalyticsRules.js.map \ No newline at end of file diff --git a/lib/Typesense/AnalyticsRules.js.map b/lib/Typesense/AnalyticsRules.js.map new file mode 100644 index 00000000..b18a8b68 --- /dev/null +++ b/lib/Typesense/AnalyticsRules.js.map @@ -0,0 +1 @@ +{"version":3,"file":"AnalyticsRules.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsRules.ts"],"names":[],"mappings":";;;AAUA,IAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC;IACE,wBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,+BAAM,GAAZ,UACE,IAAY,EACZ,MAAiC;;;gBAEjC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EACvB,MAAM,CACP,EAAC;;;KACH;IAEK,iCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA+B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC5E;IAEO,qCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,cAAc,CAAC,YAAY,SACnC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,8BAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,qBAAC;AAAD,CAAC,AA5BD,IA4BC"} \ No newline at end of file diff --git a/lib/Typesense/ApiCall.d.ts b/lib/Typesense/ApiCall.d.ts new file mode 100644 index 00000000..dd7370e6 --- /dev/null +++ b/lib/Typesense/ApiCall.d.ts @@ -0,0 +1,49 @@ +import type { AxiosRequestConfig, AxiosResponse, Method } from "axios"; +import Configuration, { NodeConfiguration } from "./Configuration"; +import TypesenseError from "./Errors/TypesenseError"; +interface Node extends NodeConfiguration { + isHealthy: boolean; + index: string | number; +} +export default class ApiCall { + private configuration; + private readonly apiKey; + private readonly nodes; + private readonly nearestNode; + private readonly connectionTimeoutSeconds; + private readonly healthcheckIntervalSeconds; + private readonly retryIntervalSeconds; + private readonly sendApiKeyAsQueryParam?; + private readonly numRetriesPerRequest; + private readonly additionalUserHeaders?; + private readonly logger; + private currentNodeIndex; + constructor(configuration: Configuration); + get(endpoint: string, queryParameters?: any, { abortSignal, responseType, }?: { + abortSignal?: any; + responseType?: AxiosRequestConfig["responseType"] | undefined; + }): Promise; + delete(endpoint: string, queryParameters?: any): Promise; + post(endpoint: string, bodyParameters?: any, queryParameters?: any, additionalHeaders?: any): Promise; + put(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + patch(endpoint: string, bodyParameters?: any, queryParameters?: any): Promise; + private getAdapter; + performRequest(requestType: Method, endpoint: string, { queryParameters, bodyParameters, additionalHeaders, abortSignal, responseType, skipConnectionTimeout, enableKeepAlive, }: { + queryParameters?: any; + bodyParameters?: any; + additionalHeaders?: any; + abortSignal?: any; + responseType?: AxiosRequestConfig["responseType"] | undefined; + skipConnectionTimeout?: boolean; + enableKeepAlive?: boolean | undefined; + }): Promise; + getNextNode(requestNumber?: number): Node; + nodeDueForHealthcheck(node: any, requestNumber?: number): boolean; + initializeMetadataForNodes(): void; + setNodeHealthcheck(node: any, isHealthy: any): void; + uriFor(endpoint: string, node: any): string; + defaultHeaders(): any; + timer(seconds: any): Promise; + customErrorForResponse(response: AxiosResponse, messageFromServer: string, httpBody?: string): TypesenseError; +} +export {}; diff --git a/lib/Typesense/ApiCall.js b/lib/Typesense/ApiCall.js new file mode 100644 index 00000000..248828d3 --- /dev/null +++ b/lib/Typesense/ApiCall.js @@ -0,0 +1,406 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var axios_1 = tslib_1.__importDefault(require("axios")); +var http_1 = require("http"); +var https_1 = require("https"); +var Errors_1 = require("./Errors"); +var TypesenseError_1 = tslib_1.__importDefault(require("./Errors/TypesenseError")); +var APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; +var HEALTHY = true; +var UNHEALTHY = false; +var isNodeJSEnvironment = typeof process !== "undefined" && + process.versions != null && + process.versions.node != null; +var ApiCall = /** @class */ (function () { + function ApiCall(configuration) { + this.configuration = configuration; + this.apiKey = this.configuration.apiKey; + this.nodes = + this.configuration.nodes == null + ? this.configuration.nodes + : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes + this.nearestNode = + this.configuration.nearestNode == null + ? this.configuration.nearestNode + : JSON.parse(JSON.stringify(this.configuration.nearestNode)); + this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds; + this.healthcheckIntervalSeconds = + this.configuration.healthcheckIntervalSeconds; + this.numRetriesPerRequest = this.configuration.numRetries; + this.retryIntervalSeconds = this.configuration.retryIntervalSeconds; + this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam; + this.additionalUserHeaders = this.configuration.additionalHeaders; + this.logger = this.configuration.logger; + this.initializeMetadataForNodes(); + this.currentNodeIndex = -1; + } + ApiCall.prototype.get = function (endpoint_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, queryParameters, _a) { + if (queryParameters === void 0) { queryParameters = {}; } + var _b = _a === void 0 ? {} : _a, _c = _b.abortSignal, abortSignal = _c === void 0 ? null : _c, _d = _b.responseType, responseType = _d === void 0 ? undefined : _d; + return tslib_1.__generator(this, function (_e) { + return [2 /*return*/, this.performRequest("get", endpoint, { + queryParameters: queryParameters, + abortSignal: abortSignal, + responseType: responseType, + })]; + }); + }); + }; + ApiCall.prototype.delete = function (endpoint_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, queryParameters) { + if (queryParameters === void 0) { queryParameters = {}; } + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.performRequest("delete", endpoint, { queryParameters: queryParameters })]; + }); + }); + }; + ApiCall.prototype.post = function (endpoint_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, bodyParameters, queryParameters, additionalHeaders) { + if (bodyParameters === void 0) { bodyParameters = {}; } + if (queryParameters === void 0) { queryParameters = {}; } + if (additionalHeaders === void 0) { additionalHeaders = {}; } + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.performRequest("post", endpoint, { + queryParameters: queryParameters, + bodyParameters: bodyParameters, + additionalHeaders: additionalHeaders, + })]; + }); + }); + }; + ApiCall.prototype.put = function (endpoint_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, bodyParameters, queryParameters) { + if (bodyParameters === void 0) { bodyParameters = {}; } + if (queryParameters === void 0) { queryParameters = {}; } + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.performRequest("put", endpoint, { + queryParameters: queryParameters, + bodyParameters: bodyParameters, + })]; + }); + }); + }; + ApiCall.prototype.patch = function (endpoint_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, bodyParameters, queryParameters) { + if (bodyParameters === void 0) { bodyParameters = {}; } + if (queryParameters === void 0) { queryParameters = {}; } + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.performRequest("patch", endpoint, { + queryParameters: queryParameters, + bodyParameters: bodyParameters, + })]; + }); + }); + }; + ApiCall.prototype.getAdapter = function () { + if (!this.configuration.axiosAdapter) + return undefined; + if (typeof this.configuration.axiosAdapter === "function") + return this.configuration.axiosAdapter; + var isCloudflareWorkers = typeof navigator !== "undefined" && + navigator.userAgent === "Cloudflare-Workers"; + return isCloudflareWorkers + ? axios_1.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis) + : axios_1.default.getAdapter(this.configuration.axiosAdapter); + }; + ApiCall.prototype.performRequest = function (requestType_1, endpoint_1, _a) { + return tslib_1.__awaiter(this, arguments, void 0, function (requestType, endpoint, _b) { + var requestNumber, lastException, wasAborted, _loop_1, this_1, numTries, state_1; + var _c, _d, _e, _f; + var _g = _b.queryParameters, queryParameters = _g === void 0 ? null : _g, _h = _b.bodyParameters, bodyParameters = _h === void 0 ? null : _h, _j = _b.additionalHeaders, additionalHeaders = _j === void 0 ? {} : _j, _k = _b.abortSignal, abortSignal = _k === void 0 ? null : _k, _l = _b.responseType, responseType = _l === void 0 ? undefined : _l, _m = _b.skipConnectionTimeout, skipConnectionTimeout = _m === void 0 ? false : _m, _o = _b.enableKeepAlive, enableKeepAlive = _o === void 0 ? undefined : _o; + return tslib_1.__generator(this, function (_p) { + switch (_p.label) { + case 0: + this.configuration.validate(); + requestNumber = Date.now(); + wasAborted = false; + this.logger.debug("Request #".concat(requestNumber, ": Performing ").concat(requestType.toUpperCase(), " request: ").concat(endpoint)); + _loop_1 = function (numTries) { + var node, abortListener, requestOptions, cancelToken, source_1, response, error_1; + return tslib_1.__generator(this, function (_q) { + switch (_q.label) { + case 0: + node = this_1.getNextNode(requestNumber); + this_1.logger.debug("Request #".concat(requestNumber, ": Attempting ").concat(requestType.toUpperCase(), " request Try #").concat(numTries, " to Node ").concat(node.index)); + if (abortSignal && abortSignal.aborted) { + return [2 /*return*/, { value: Promise.reject(new Error("Request aborted by caller.")) }]; + } + abortListener = void 0; + _q.label = 1; + case 1: + _q.trys.push([1, 3, 5, 6]); + requestOptions = { + adapter: this_1.getAdapter(), + method: requestType, + url: this_1.uriFor(endpoint, node), + headers: Object.assign({}, this_1.defaultHeaders(), additionalHeaders, this_1.additionalUserHeaders), + maxContentLength: Infinity, + maxBodyLength: Infinity, + responseType: responseType, + validateStatus: function (status) { + /* Override default validateStatus, which only considers 2xx a success. + In our case, if the server returns any HTTP code, we will handle it below. + We do this to be able to raise custom errors based on response code. + */ + return status > 0; + }, + transformResponse: [ + function (data, headers) { + var transformedData = data; + if (headers !== undefined && + typeof data === "string" && + headers["content-type"] && + headers["content-type"].startsWith("application/json")) { + transformedData = JSON.parse(data); + } + return transformedData; + }, + ], + }; + if (skipConnectionTimeout !== true) { + requestOptions.timeout = this_1.connectionTimeoutSeconds * 1000; + } + if (queryParameters && Object.keys(queryParameters).length !== 0) { + requestOptions.params = queryParameters; + } + if (this_1.sendApiKeyAsQueryParam) { + requestOptions.params = requestOptions.params || {}; + requestOptions.params["x-typesense-api-key"] = this_1.apiKey; + } + if (this_1.configuration.httpAgent) { + this_1.logger.debug("Request #".concat(requestNumber, ": Using custom httpAgent")); + requestOptions.httpAgent = this_1.configuration.httpAgent; + } + else if (enableKeepAlive === true) { + if (!isNodeJSEnvironment) { + this_1.logger.warn("Request #".concat(requestNumber, ": Cannot use custom httpAgent in a browser environment to enable keepAlive")); + } + else { + this_1.logger.debug("Request #".concat(requestNumber, ": Enabling KeepAlive")); + requestOptions.httpAgent = new http_1.Agent({ keepAlive: true }); + } + } + if (this_1.configuration.httpsAgent) { + this_1.logger.debug("Request #".concat(requestNumber, ": Using custom httpsAgent")); + requestOptions.httpsAgent = this_1.configuration.httpsAgent; + } + else if (enableKeepAlive === true) { + if (!isNodeJSEnvironment) { + this_1.logger.warn("Request #".concat(requestNumber, ": Cannot use custom httpAgent in a browser environment to enable keepAlive")); + } + else { + this_1.logger.debug("Request #".concat(requestNumber, ": Enabling keepAlive")); + requestOptions.httpsAgent = new https_1.Agent({ keepAlive: true }); + } + } + if (this_1.configuration.paramsSerializer) { + this_1.logger.debug("Request #".concat(requestNumber, ": Using custom paramsSerializer")); + requestOptions.paramsSerializer = this_1.configuration.paramsSerializer; + } + if (bodyParameters && + ((typeof bodyParameters === "string" && + bodyParameters.length !== 0) || + (typeof bodyParameters === "object" && + Object.keys(bodyParameters).length !== 0))) { + requestOptions.data = bodyParameters; + } + // Translate from user-provided AbortController to the Axios request cancel mechanism. + if (abortSignal) { + cancelToken = axios_1.default.CancelToken; + source_1 = cancelToken.source(); + abortListener = function () { + wasAborted = true; + source_1.cancel(); + }; + abortSignal.addEventListener("abort", abortListener); + requestOptions.cancelToken = source_1.token; + } + return [4 /*yield*/, (0, axios_1.default)(requestOptions)]; + case 2: + response = _q.sent(); + if (response.status >= 1 && response.status <= 499) { + // Treat any status code > 0 and < 500 to be an indication that node is healthy + // We exclude 0 since some clients return 0 when request fails + this_1.setNodeHealthcheck(node, HEALTHY); + } + this_1.logger.debug("Request #".concat(requestNumber, ": Request to Node ").concat(node.index, " was made. Response Code was ").concat(response.status, ".")); + if (response.status >= 200 && response.status < 300) { + return [2 /*return*/, { value: Promise.resolve(response.data) }]; + } + else if (response.status < 500) { + return [2 /*return*/, { value: Promise.reject(this_1.customErrorForResponse(response, (_c = response.data) === null || _c === void 0 ? void 0 : _c.message, requestOptions.data)) }]; + } + else { + // Retry all other HTTP errors (HTTPStatus > 500) + // This will get caught by the catch block below + throw this_1.customErrorForResponse(response, (_d = response.data) === null || _d === void 0 ? void 0 : _d.message, requestOptions.data); + } + return [3 /*break*/, 6]; + case 3: + error_1 = _q.sent(); + // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts + if (!wasAborted) { + this_1.setNodeHealthcheck(node, UNHEALTHY); + } + lastException = error_1; + this_1.logger.warn("Request #".concat(requestNumber, ": Request to Node ").concat(node.index, " failed due to \"").concat((_e = error_1 === null || error_1 === void 0 ? void 0 : error_1.code) !== null && _e !== void 0 ? _e : "", " ").concat(error_1.message).concat(error_1.response == null + ? "" + : " - " + JSON.stringify((_f = error_1.response) === null || _f === void 0 ? void 0 : _f.data), "\"")); + // this.logger.debug(error.stack) + if (wasAborted) { + return [2 /*return*/, { value: Promise.reject(new Error("Request aborted by caller.")) }]; + } + if (numTries < this_1.numRetriesPerRequest + 1) { + this_1.logger.warn("Request #".concat(requestNumber, ": Sleeping for ").concat(this_1.retryIntervalSeconds, "s and then retrying request...")); + } + return [4 /*yield*/, this_1.timer(this_1.retryIntervalSeconds)]; + case 4: + _q.sent(); + return [3 /*break*/, 6]; + case 5: + if (abortSignal && abortListener) { + abortSignal.removeEventListener("abort", abortListener); + } + return [7 /*endfinally*/]; + case 6: return [2 /*return*/]; + } + }); + }; + this_1 = this; + numTries = 1; + _p.label = 1; + case 1: + if (!(numTries <= this.numRetriesPerRequest + 1)) return [3 /*break*/, 4]; + return [5 /*yield**/, _loop_1(numTries)]; + case 2: + state_1 = _p.sent(); + if (typeof state_1 === "object") + return [2 /*return*/, state_1.value]; + _p.label = 3; + case 3: + numTries++; + return [3 /*break*/, 1]; + case 4: + this.logger.debug("Request #".concat(requestNumber, ": No retries left. Raising last error")); + return [2 /*return*/, Promise.reject(lastException)]; + } + }); + }); + }; + // Attempts to find the next healthy node, looping through the list of nodes once. + // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy + // so we can try the request for good measure, in case that node has become healthy since + ApiCall.prototype.getNextNode = function (requestNumber) { + if (requestNumber === void 0) { requestNumber = 0; } + // Check if nearestNode is set and is healthy, if so return it + if (this.nearestNode != null) { + this.logger.debug("Request #".concat(requestNumber, ": Nodes Health: Node ").concat(this.nearestNode.index, " is ").concat(this.nearestNode.isHealthy === true ? "Healthy" : "Unhealthy")); + if (this.nearestNode.isHealthy === true || + this.nodeDueForHealthcheck(this.nearestNode, requestNumber)) { + this.logger.debug("Request #".concat(requestNumber, ": Updated current node to Node ").concat(this.nearestNode.index)); + return this.nearestNode; + } + this.logger.debug("Request #".concat(requestNumber, ": Falling back to individual nodes")); + } + // Fallback to nodes as usual + this.logger.debug("Request #".concat(requestNumber, ": Nodes Health: ").concat(this.nodes + .map(function (node) { + return "Node ".concat(node.index, " is ").concat(node.isHealthy === true ? "Healthy" : "Unhealthy"); + }) + .join(" || "))); + var candidateNode = this.nodes[0]; + for (var i = 0; i <= this.nodes.length; i++) { + this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length; + candidateNode = this.nodes[this.currentNodeIndex]; + if (candidateNode.isHealthy === true || + this.nodeDueForHealthcheck(candidateNode, requestNumber)) { + this.logger.debug("Request #".concat(requestNumber, ": Updated current node to Node ").concat(candidateNode.index)); + return candidateNode; + } + } + // None of the nodes are marked healthy, but some of them could have become healthy since last health check. + // So we will just return the next node. + this.logger.debug("Request #".concat(requestNumber, ": No healthy nodes were found. Returning the next node, Node ").concat(candidateNode.index)); + return candidateNode; + }; + ApiCall.prototype.nodeDueForHealthcheck = function (node, requestNumber) { + if (requestNumber === void 0) { requestNumber = 0; } + var isDueForHealthcheck = Date.now() - node.lastAccessTimestamp > + this.healthcheckIntervalSeconds * 1000; + if (isDueForHealthcheck) { + this.logger.debug("Request #".concat(requestNumber, ": Node ").concat(node.index, " has exceeded healtcheckIntervalSeconds of ").concat(this.healthcheckIntervalSeconds, ". Adding it back into rotation.")); + } + return isDueForHealthcheck; + }; + ApiCall.prototype.initializeMetadataForNodes = function () { + var _this = this; + if (this.nearestNode != null) { + this.nearestNode.index = "nearestNode"; + this.setNodeHealthcheck(this.nearestNode, HEALTHY); + } + this.nodes.forEach(function (node, i) { + node.index = i; + _this.setNodeHealthcheck(node, HEALTHY); + }); + }; + ApiCall.prototype.setNodeHealthcheck = function (node, isHealthy) { + node.isHealthy = isHealthy; + node.lastAccessTimestamp = Date.now(); + }; + ApiCall.prototype.uriFor = function (endpoint, node) { + if (node.url != null) { + return "".concat(node.url).concat(endpoint); + } + return "".concat(node.protocol, "://").concat(node.host, ":").concat(node.port).concat(node.path).concat(endpoint); + }; + ApiCall.prototype.defaultHeaders = function () { + var defaultHeaders = {}; + if (!this.sendApiKeyAsQueryParam) { + defaultHeaders[APIKEYHEADERNAME] = this.apiKey; + } + defaultHeaders["Content-Type"] = "application/json"; + return defaultHeaders; + }; + ApiCall.prototype.timer = function (seconds) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, seconds * 1000); })]; + }); + }); + }; + ApiCall.prototype.customErrorForResponse = function (response, messageFromServer, httpBody) { + var errorMessage = "Request failed with HTTP code ".concat(response.status); + if (typeof messageFromServer === "string" && + messageFromServer.trim() !== "") { + errorMessage += " | Server said: ".concat(messageFromServer); + } + var error = new TypesenseError_1.default(errorMessage, httpBody, response.status); + if (response.status === 400) { + error = new Errors_1.RequestMalformed(errorMessage); + } + else if (response.status === 401) { + error = new Errors_1.RequestUnauthorized(errorMessage); + } + else if (response.status === 404) { + error = new Errors_1.ObjectNotFound(errorMessage); + } + else if (response.status === 409) { + error = new Errors_1.ObjectAlreadyExists(errorMessage); + } + else if (response.status === 422) { + error = new Errors_1.ObjectUnprocessable(errorMessage); + } + else if (response.status >= 500 && response.status <= 599) { + error = new Errors_1.ServerError(errorMessage); + } + else { + error = new Errors_1.HTTPError(errorMessage); + } + return error; + }; + return ApiCall; +}()); +exports.default = ApiCall; +//# sourceMappingURL=ApiCall.js.map \ No newline at end of file diff --git a/lib/Typesense/ApiCall.js.map b/lib/Typesense/ApiCall.js.map new file mode 100644 index 00000000..0ef7fe16 --- /dev/null +++ b/lib/Typesense/ApiCall.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ApiCall.js","sourceRoot":"","sources":["../../src/Typesense/ApiCall.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Client.d.ts b/lib/Typesense/Client.d.ts new file mode 100644 index 00000000..60507ed1 --- /dev/null +++ b/lib/Typesense/Client.d.ts @@ -0,0 +1,59 @@ +import Configuration, { ConfigurationOptions } from "./Configuration"; +import ApiCall from "./ApiCall"; +import Collections from "./Collections"; +import Collection from "./Collection"; +import Aliases from "./Aliases"; +import Alias from "./Alias"; +import Keys from "./Keys"; +import Key from "./Key"; +import Debug from "./Debug"; +import Metrics from "./Metrics"; +import Stats from "./Stats"; +import Health from "./Health"; +import Operations from "./Operations"; +import MultiSearch from "./MultiSearch"; +import Presets from "./Presets"; +import Preset from "./Preset"; +import Analytics from "./Analytics"; +import Stopwords from "./Stopwords"; +import Stopword from "./Stopword"; +import Conversations from "./Conversations"; +import Conversation from "./Conversation"; +import Stemming from "./Stemming"; +export default class Client { + configuration: Configuration; + apiCall: ApiCall; + debug: Debug; + metrics: Metrics; + stats: Stats; + health: Health; + operations: Operations; + multiSearch: MultiSearch; + analytics: Analytics; + stemming: Stemming; + private readonly _collections; + private readonly individualCollections; + private readonly _aliases; + private readonly individualAliases; + private readonly _keys; + private readonly individualKeys; + private readonly _presets; + private readonly individualPresets; + private readonly _stopwords; + private readonly individualStopwords; + private readonly _conversations; + private readonly individualConversations; + constructor(options: ConfigurationOptions); + collections(): Collections; + collections = object>(collectionName: string): Collection; + aliases(): Aliases; + aliases(aliasName: string): Alias; + keys(): Keys; + keys(id: number): Key; + presets(): Presets; + presets(id: string): Preset; + stopwords(): Stopwords; + stopwords(id: string): Stopword; + conversations(): Conversations; + conversations(id: string): Conversation; +} diff --git a/lib/Typesense/Client.js b/lib/Typesense/Client.js new file mode 100644 index 00000000..1d428892 --- /dev/null +++ b/lib/Typesense/Client.js @@ -0,0 +1,123 @@ +"use strict"; +/* eslint-disable no-dupe-class-members */ +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Configuration_1 = tslib_1.__importDefault(require("./Configuration")); +var ApiCall_1 = tslib_1.__importDefault(require("./ApiCall")); +var Collections_1 = tslib_1.__importDefault(require("./Collections")); +var Collection_1 = tslib_1.__importDefault(require("./Collection")); +var Aliases_1 = tslib_1.__importDefault(require("./Aliases")); +var Alias_1 = tslib_1.__importDefault(require("./Alias")); +var Keys_1 = tslib_1.__importDefault(require("./Keys")); +var Key_1 = tslib_1.__importDefault(require("./Key")); +var Debug_1 = tslib_1.__importDefault(require("./Debug")); +var Metrics_1 = tslib_1.__importDefault(require("./Metrics")); +var Stats_1 = tslib_1.__importDefault(require("./Stats")); +var Health_1 = tslib_1.__importDefault(require("./Health")); +var Operations_1 = tslib_1.__importDefault(require("./Operations")); +var MultiSearch_1 = tslib_1.__importDefault(require("./MultiSearch")); +var Presets_1 = tslib_1.__importDefault(require("./Presets")); +var Preset_1 = tslib_1.__importDefault(require("./Preset")); +var Analytics_1 = tslib_1.__importDefault(require("./Analytics")); +var Stopwords_1 = tslib_1.__importDefault(require("./Stopwords")); +var Stopword_1 = tslib_1.__importDefault(require("./Stopword")); +var Conversations_1 = tslib_1.__importDefault(require("./Conversations")); +var Conversation_1 = tslib_1.__importDefault(require("./Conversation")); +var Stemming_1 = tslib_1.__importDefault(require("./Stemming")); +var Client = /** @class */ (function () { + function Client(options) { + var _a; + options.sendApiKeyAsQueryParam = (_a = options.sendApiKeyAsQueryParam) !== null && _a !== void 0 ? _a : false; + this.configuration = new Configuration_1.default(options); + this.apiCall = new ApiCall_1.default(this.configuration); + this.debug = new Debug_1.default(this.apiCall); + this.metrics = new Metrics_1.default(this.apiCall); + this.stats = new Stats_1.default(this.apiCall); + this.health = new Health_1.default(this.apiCall); + this.operations = new Operations_1.default(this.apiCall); + this.multiSearch = new MultiSearch_1.default(this.apiCall, this.configuration); + this._collections = new Collections_1.default(this.apiCall); + this.individualCollections = {}; + this._aliases = new Aliases_1.default(this.apiCall); + this.individualAliases = {}; + this._keys = new Keys_1.default(this.apiCall); + this.individualKeys = {}; + this._presets = new Presets_1.default(this.apiCall); + this.individualPresets = {}; + this._stopwords = new Stopwords_1.default(this.apiCall); + this.individualStopwords = {}; + this.analytics = new Analytics_1.default(this.apiCall); + this.stemming = new Stemming_1.default(this.apiCall); + this._conversations = new Conversations_1.default(this.apiCall); + this.individualConversations = {}; + } + Client.prototype.collections = function (collectionName) { + if (collectionName === undefined) { + return this._collections; + } + else { + if (this.individualCollections[collectionName] === undefined) { + this.individualCollections[collectionName] = new Collection_1.default(collectionName, this.apiCall, this.configuration); + } + return this.individualCollections[collectionName]; + } + }; + Client.prototype.aliases = function (aliasName) { + if (aliasName === undefined) { + return this._aliases; + } + else { + if (this.individualAliases[aliasName] === undefined) { + this.individualAliases[aliasName] = new Alias_1.default(aliasName, this.apiCall); + } + return this.individualAliases[aliasName]; + } + }; + Client.prototype.keys = function (id) { + if (id === undefined) { + return this._keys; + } + else { + if (this.individualKeys[id] === undefined) { + this.individualKeys[id] = new Key_1.default(id, this.apiCall); + } + return this.individualKeys[id]; + } + }; + Client.prototype.presets = function (id) { + if (id === undefined) { + return this._presets; + } + else { + if (this.individualPresets[id] === undefined) { + this.individualPresets[id] = new Preset_1.default(id, this.apiCall); + } + return this.individualPresets[id]; + } + }; + Client.prototype.stopwords = function (id) { + if (id === undefined) { + return this._stopwords; + } + else { + if (this.individualStopwords[id] === undefined) { + this.individualStopwords[id] = new Stopword_1.default(id, this.apiCall); + } + return this.individualStopwords[id]; + } + }; + Client.prototype.conversations = function (id) { + if (id === undefined) { + return this._conversations; + } + else { + if (this.individualConversations[id] === undefined) { + this.individualConversations[id] = new Conversation_1.default(id, this.apiCall); + } + return this.individualConversations[id]; + } + }; + return Client; +}()); +exports.default = Client; +//# sourceMappingURL=Client.js.map \ No newline at end of file diff --git a/lib/Typesense/Client.js.map b/lib/Typesense/Client.js.map new file mode 100644 index 00000000..bdccd4aa --- /dev/null +++ b/lib/Typesense/Client.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../src/Typesense/Client.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Collection.d.ts b/lib/Typesense/Collection.d.ts new file mode 100644 index 00000000..57e47451 --- /dev/null +++ b/lib/Typesense/Collection.d.ts @@ -0,0 +1,62 @@ +import ApiCall from "./ApiCall"; +import { CollectionCreateSchema } from "./Collections"; +import Documents, { DocumentSchema } from "./Documents"; +import Overrides from "./Overrides"; +import Override from "./Override"; +import Synonyms from "./Synonyms"; +import Synonym from "./Synonym"; +import { Document } from "./Document"; +export type FieldType = "string" | "int32" | "int64" | "float" | "bool" | "geopoint" | "geopolygon" | "geopoint[]" | "string[]" | "int32[]" | "int64[]" | "float[]" | "bool[]" | "object" | "object[]" | "auto" | "string*" | "image"; +export interface CollectionFieldSchema extends Pick { + name: string; + type: FieldType; + optional?: boolean; + facet?: boolean; + index?: boolean; + sort?: boolean; + locale?: string; + infix?: boolean; + stem?: boolean; + num_dim?: number; + store?: boolean; + range_index?: boolean; + [t: string]: unknown; +} +export interface CollectionSchema extends CollectionCreateSchema { + created_at: number; + num_documents: number; + num_memory_shards: number; +} +export interface CollectionDropFieldSchema { + name: string; + drop: true; +} +export interface CollectionUpdateSchema extends Partial> { + fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[]; +} +export interface CollectionDeleteOptions { + compact_store?: boolean; +} +export default class Collection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + private individualDocuments; + private readonly _overrides; + private individualOverrides; + private readonly _synonyms; + private individualSynonyms; + constructor(name: string, apiCall: ApiCall, configuration: any); + retrieve(): Promise; + update(schema: CollectionUpdateSchema): Promise; + delete(options?: CollectionDeleteOptions): Promise; + exists(): Promise; + documents(): Documents; + documents(documentId: string): Document; + overrides(): Overrides; + overrides(overrideId: string): Override; + synonyms(): Synonyms; + synonyms(synonymId: string): Synonym; + private endpointPath; +} diff --git a/lib/Typesense/Collection.js b/lib/Typesense/Collection.js new file mode 100644 index 00000000..92c6b063 --- /dev/null +++ b/lib/Typesense/Collection.js @@ -0,0 +1,109 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Collections_1 = tslib_1.__importDefault(require("./Collections")); +var Documents_1 = tslib_1.__importDefault(require("./Documents")); +var Errors_1 = require("./Errors"); +var Overrides_1 = tslib_1.__importDefault(require("./Overrides")); +var Override_1 = tslib_1.__importDefault(require("./Override")); +var Synonyms_1 = tslib_1.__importDefault(require("./Synonyms")); +var Synonym_1 = tslib_1.__importDefault(require("./Synonym")); +var Document_1 = require("./Document"); +var Collection = /** @class */ (function () { + function Collection(name, apiCall, configuration) { + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this.individualDocuments = {}; + this.individualOverrides = {}; + this.individualSynonyms = {}; + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this._documents = new Documents_1.default(this.name, this.apiCall, this.configuration); + this._overrides = new Overrides_1.default(this.name, this.apiCall); + this._synonyms = new Synonyms_1.default(this.name, this.apiCall); + } + Collection.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Collection.prototype.update = function (schema) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.patch(this.endpointPath(), schema)]; + }); + }); + }; + Collection.prototype.delete = function () { + return tslib_1.__awaiter(this, arguments, void 0, function (options) { + if (options === void 0) { options = {}; } + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.delete(this.endpointPath(), options)]; + }); + }); + }; + Collection.prototype.exists = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var e_1; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, this.retrieve()]; + case 1: + _a.sent(); + return [2 /*return*/, true]; + case 2: + e_1 = _a.sent(); + if (e_1 instanceof Errors_1.ObjectNotFound) + return [2 /*return*/, false]; + throw e_1; + case 3: return [2 /*return*/]; + } + }); + }); + }; + Collection.prototype.documents = function (documentId) { + if (!documentId) { + return this._documents; + } + else { + if (this.individualDocuments[documentId] === undefined) { + this.individualDocuments[documentId] = new Document_1.Document(this.name, documentId, this.apiCall); + } + return this.individualDocuments[documentId]; + } + }; + Collection.prototype.overrides = function (overrideId) { + if (overrideId === undefined) { + return this._overrides; + } + else { + if (this.individualOverrides[overrideId] === undefined) { + this.individualOverrides[overrideId] = new Override_1.default(this.name, overrideId, this.apiCall); + } + return this.individualOverrides[overrideId]; + } + }; + Collection.prototype.synonyms = function (synonymId) { + if (synonymId === undefined) { + return this._synonyms; + } + else { + if (this.individualSynonyms[synonymId] === undefined) { + this.individualSynonyms[synonymId] = new Synonym_1.default(this.name, synonymId, this.apiCall); + } + return this.individualSynonyms[synonymId]; + } + }; + Collection.prototype.endpointPath = function () { + return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.name)); + }; + return Collection; +}()); +exports.default = Collection; +//# sourceMappingURL=Collection.js.map \ No newline at end of file diff --git a/lib/Typesense/Collection.js.map b/lib/Typesense/Collection.js.map new file mode 100644 index 00000000..e22e9a23 --- /dev/null +++ b/lib/Typesense/Collection.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Collection.js","sourceRoot":"","sources":["../../src/Typesense/Collection.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Collections.d.ts b/lib/Typesense/Collections.d.ts new file mode 100644 index 00000000..050962bd --- /dev/null +++ b/lib/Typesense/Collections.d.ts @@ -0,0 +1,27 @@ +import ApiCall from "./ApiCall"; +import { CollectionFieldSchema, CollectionSchema } from "./Collection"; +export interface CollectionCreateSchema { + name: string; + default_sorting_field?: string; + fields?: CollectionFieldSchema[]; + symbols_to_index?: string[]; + token_separators?: string[]; + enable_nested_fields?: boolean; + metadata?: object; + voice_query_model?: { + model_name?: string; + }; +} +export interface CollectionCreateOptions { + src_name?: string; +} +export interface CollectionsRetrieveOptions { + exclude_fields?: string; +} +export default class Collections { + private apiCall; + constructor(apiCall: ApiCall); + create(schema: CollectionCreateSchema, options?: CollectionCreateOptions): Promise; + retrieve(options?: CollectionsRetrieveOptions): Promise; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/Collections.js b/lib/Typesense/Collections.js new file mode 100644 index 00000000..05248fe0 --- /dev/null +++ b/lib/Typesense/Collections.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RESOURCEPATH = "/collections"; +var Collections = /** @class */ (function () { + function Collections(apiCall) { + this.apiCall = apiCall; + } + Collections.prototype.create = function (schema_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (schema, options) { + if (options === void 0) { options = {}; } + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.post(RESOURCEPATH, schema, options)]; + }); + }); + }; + Collections.prototype.retrieve = function () { + return tslib_1.__awaiter(this, arguments, void 0, function (options) { + if (options === void 0) { options = {}; } + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(RESOURCEPATH, options)]; + }); + }); + }; + Object.defineProperty(Collections, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return Collections; +}()); +exports.default = Collections; +//# sourceMappingURL=Collections.js.map \ No newline at end of file diff --git a/lib/Typesense/Collections.js.map b/lib/Typesense/Collections.js.map new file mode 100644 index 00000000..b55b67d0 --- /dev/null +++ b/lib/Typesense/Collections.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Collections.js","sourceRoot":"","sources":["../../src/Typesense/Collections.ts"],"names":[],"mappings":";;;AAwBA,IAAM,YAAY,GAAG,cAAc,CAAC;AAEpC;IACE,qBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,4BAAM,GAAZ;oEACE,MAA8B,EAC9B,OAAqC;YAArC,wBAAA,EAAA,YAAqC;;gBAErC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAmB,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAC;;;KAC3E;IAEK,8BAAQ,GAAd;oEACE,OAAwC;YAAxC,wBAAA,EAAA,YAAwC;;gBAExC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAqB,YAAY,EAAE,OAAO,CAAC,EAAC;;;KACpE;IAED,sBAAW,2BAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,kBAAC;AAAD,CAAC,AAnBD,IAmBC"} \ No newline at end of file diff --git a/lib/Typesense/Configuration.d.ts b/lib/Typesense/Configuration.d.ts new file mode 100644 index 00000000..094d0a23 --- /dev/null +++ b/lib/Typesense/Configuration.d.ts @@ -0,0 +1,115 @@ +import logger from "loglevel"; +import type { Agent as HTTPAgent } from "http"; +import type { Agent as HTTPSAgent } from "https"; +import type { AxiosRequestConfig } from "axios"; +export interface NodeConfiguration { + host: string; + port: number; + protocol: string; + path?: string; + url?: string; +} +export interface NodeConfigurationWithHostname { + host: string; + port: number; + protocol: string; + path?: string; +} +export interface NodeConfigurationWithUrl { + url: string; +} +export interface ConfigurationOptions { + apiKey: string; + nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + randomizeNodes?: boolean; + /** + * @deprecated + * masterNode is now consolidated to nodes, starting with Typesense Server v0.12' + */ + masterNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + /** + * @deprecated + * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12' + */ + readReplicaNodes?: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + connectionTimeoutSeconds?: number; + timeoutSeconds?: number; + healthcheckIntervalSeconds?: number; + numRetries?: number; + retryIntervalSeconds?: number; + sendApiKeyAsQueryParam?: boolean | undefined; + useServerSideSearchCache?: boolean; + cacheSearchResultsForSeconds?: number; + additionalHeaders?: Record; + logLevel?: logger.LogLevelDesc; + logger?: logger.Logger; + /** + * Set a custom HTTP Agent + * + * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors + * Usage: + * const { Agent: HTTPAgent } = require("http"); + * ... + * httpAgent: new HTTPAgent({ keepAlive: true }), + * @type {HTTPAgent} + */ + httpAgent?: HTTPAgent; + /** + * Set a custom HTTPS Agent + * + * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors + * Usage: + * const { Agent: HTTPSAgent } = require("https"); + * ... + * httpsAgent: new HTTPSAgent({ keepAlive: true }), + * @type {HTTPSAgent} + */ + httpsAgent?: HTTPSAgent; + /** + * Set a custom paramsSerializer + * + * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config + * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397 + * @type {any} + */ + paramsSerializer?: any; + /** + * Set a custom axios adapter + * + * Useful for customizing the underlying HTTP client library used by Typesense. + * + * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge. + * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161 + * + * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config + */ + axiosAdapter?: AxiosRequestConfig["adapter"]; +} +export default class Configuration { + readonly nodes: NodeConfiguration[] | NodeConfigurationWithHostname[] | NodeConfigurationWithUrl[]; + readonly nearestNode?: NodeConfiguration | NodeConfigurationWithHostname | NodeConfigurationWithUrl; + readonly connectionTimeoutSeconds: number; + readonly healthcheckIntervalSeconds: number; + readonly numRetries: number; + readonly retryIntervalSeconds: number; + readonly apiKey: string; + readonly sendApiKeyAsQueryParam?: boolean; + readonly cacheSearchResultsForSeconds: number; + readonly useServerSideSearchCache: boolean; + readonly logger: logger.Logger; + readonly logLevel: logger.LogLevelDesc; + readonly additionalHeaders?: Record; + readonly httpAgent?: HTTPAgent; + readonly httpsAgent?: HTTPSAgent; + readonly paramsSerializer?: any; + readonly axiosAdapter?: AxiosRequestConfig["adapter"]; + constructor(options: ConfigurationOptions); + validate(): boolean; + private validateNodes; + private isNodeMissingAnyParameters; + private setDefaultPathInNode; + private setDefaultPortInNode; + private showDeprecationWarnings; + private shuffleArray; +} diff --git a/lib/Typesense/Configuration.js b/lib/Typesense/Configuration.js new file mode 100644 index 00000000..1cb1151b --- /dev/null +++ b/lib/Typesense/Configuration.js @@ -0,0 +1,113 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var loglevel_1 = tslib_1.__importDefault(require("loglevel")); +var Errors_1 = require("./Errors"); +var Configuration = /** @class */ (function () { + function Configuration(options) { + var _this = this; + this.nodes = options.nodes || []; + this.nodes = this.nodes + .map(function (node) { return _this.setDefaultPathInNode(node); }) + .map(function (node) { return _this.setDefaultPortInNode(node); }) + .map(function (node) { return (tslib_1.__assign({}, node)); }); // Make a deep copy + if (options.randomizeNodes == null) { + options.randomizeNodes = true; + } + if (options.randomizeNodes === true) { + this.shuffleArray(this.nodes); + } + this.nearestNode = options.nearestNode; + this.nearestNode = this.setDefaultPathInNode(this.nearestNode); + this.nearestNode = this.setDefaultPortInNode(this.nearestNode); + this.connectionTimeoutSeconds = + options.connectionTimeoutSeconds || options.timeoutSeconds || 5; + this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60; + this.numRetries = + (options.numRetries !== undefined && options.numRetries >= 0 + ? options.numRetries + : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; + this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1; + this.apiKey = options.apiKey; + this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient + this.cacheSearchResultsForSeconds = + options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default + this.useServerSideSearchCache = options.useServerSideSearchCache || false; + this.axiosAdapter = options.axiosAdapter; + this.logger = options.logger || loglevel_1.default; + this.logLevel = options.logLevel || "warn"; + this.logger.setLevel(this.logLevel); + this.additionalHeaders = options.additionalHeaders; + this.httpAgent = options.httpAgent; + this.httpsAgent = options.httpsAgent; + this.paramsSerializer = options.paramsSerializer; + this.showDeprecationWarnings(options); + this.validate(); + } + Configuration.prototype.validate = function () { + if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) { + throw new Errors_1.MissingConfigurationError("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set"); + } + if (this.nearestNode != null && + this.isNodeMissingAnyParameters(this.nearestNode)) { + throw new Errors_1.MissingConfigurationError("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set"); + } + if (this.apiKey == null) { + throw new Errors_1.MissingConfigurationError("Ensure that apiKey is set"); + } + return true; + }; + Configuration.prototype.validateNodes = function () { + var _this = this; + return this.nodes.some(function (node) { + return _this.isNodeMissingAnyParameters(node); + }); + }; + Configuration.prototype.isNodeMissingAnyParameters = function (node) { + return (!["protocol", "host", "port", "path"].every(function (key) { + return node.hasOwnProperty(key); + }) && node["url"] == null); + }; + Configuration.prototype.setDefaultPathInNode = function (node) { + if (node != null && !node.hasOwnProperty("path")) { + node["path"] = ""; + } + return node; + }; + Configuration.prototype.setDefaultPortInNode = function (node) { + if (node != null && + !node.hasOwnProperty("port") && + node.hasOwnProperty("protocol")) { + switch (node["protocol"]) { + case "https": + node["port"] = 443; + break; + case "http": + node["port"] = 80; + break; + } + } + return node; + }; + Configuration.prototype.showDeprecationWarnings = function (options) { + if (options.timeoutSeconds) { + this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"); + } + if (options.masterNode) { + this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"); + } + if (options.readReplicaNodes) { + this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12"); + } + }; + Configuration.prototype.shuffleArray = function (array) { + var _a; + for (var i = array.length - 1; i > 0; i--) { + var j = Math.floor(Math.random() * (i + 1)); + _a = [array[j], array[i]], array[i] = _a[0], array[j] = _a[1]; + } + }; + return Configuration; +}()); +exports.default = Configuration; +//# sourceMappingURL=Configuration.js.map \ No newline at end of file diff --git a/lib/Typesense/Configuration.js.map b/lib/Typesense/Configuration.js.map new file mode 100644 index 00000000..e8711f2e --- /dev/null +++ b/lib/Typesense/Configuration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Configuration.js","sourceRoot":"","sources":["../../src/Typesense/Configuration.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Conversation.d.ts b/lib/Typesense/Conversation.d.ts new file mode 100644 index 00000000..4e067cb9 --- /dev/null +++ b/lib/Typesense/Conversation.d.ts @@ -0,0 +1,22 @@ +import ApiCall from "./ApiCall"; +export interface ConversationDeleteSchema { + id: number; +} +export interface ConversationUpdateSchema { + ttl: number; +} +export interface ConversationSchema { + id: number; + conversation: object[]; + last_updated: number; + ttl: number; +} +export default class Conversation { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + retrieve(): Promise; + update(params: ConversationUpdateSchema): Promise; + delete(): Promise; + private endpointPath; +} diff --git a/lib/Typesense/Conversation.js b/lib/Typesense/Conversation.js new file mode 100644 index 00000000..b0891aed --- /dev/null +++ b/lib/Typesense/Conversation.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Conversations_1 = tslib_1.__importDefault(require("./Conversations")); +var Conversation = /** @class */ (function () { + function Conversation(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + Conversation.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Conversation.prototype.update = function (params) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.put(this.endpointPath(), params)]; + }); + }); + }; + Conversation.prototype.delete = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; + }); + }); + }; + Conversation.prototype.endpointPath = function () { + return "".concat(Conversations_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); + }; + return Conversation; +}()); +exports.default = Conversation; +//# sourceMappingURL=Conversation.js.map \ No newline at end of file diff --git a/lib/Typesense/Conversation.js.map b/lib/Typesense/Conversation.js.map new file mode 100644 index 00000000..0a9646b7 --- /dev/null +++ b/lib/Typesense/Conversation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Conversation.js","sourceRoot":"","sources":["../../src/Typesense/Conversation.ts"],"names":[],"mappings":";;;AACA,0EAA4C;AAiB5C;IACE,sBACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,+BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACpE;IAEK,6BAAM,GAAZ,UACE,MAAgC;;;gBAEhC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,EAAC;;;KACH;IAEK,6BAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAA2B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC3E;IAEO,mCAAY,GAApB;QACE,OAAO,UAAG,uBAAa,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;IACxE,CAAC;IACH,mBAAC;AAAD,CAAC,AA1BD,IA0BC"} \ No newline at end of file diff --git a/lib/Typesense/ConversationModel.d.ts b/lib/Typesense/ConversationModel.d.ts new file mode 100644 index 00000000..1bd8c340 --- /dev/null +++ b/lib/Typesense/ConversationModel.d.ts @@ -0,0 +1,24 @@ +import ApiCall from "./ApiCall"; +export interface ConversationModelCreateSchema { + id?: string; + model_name: string; + api_key?: string; + system_prompt?: string; + max_bytes: number; + history_collection?: string; +} +export interface ConversationModelDeleteSchema { + id: string; +} +export interface ConversationModelSchema extends ConversationModelCreateSchema { + id: string; +} +export default class ConversationModel { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + update(params: ConversationModelCreateSchema): Promise; + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} diff --git a/lib/Typesense/ConversationModel.js b/lib/Typesense/ConversationModel.js new file mode 100644 index 00000000..2da74c2d --- /dev/null +++ b/lib/Typesense/ConversationModel.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var ConversationModels_1 = tslib_1.__importDefault(require("./ConversationModels")); +var ConversationModel = /** @class */ (function () { + function ConversationModel(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + ConversationModel.prototype.update = function (params) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.put(this.endpointPath(), params)]; + }); + }); + }; + ConversationModel.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + ConversationModel.prototype.delete = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; + }); + }); + }; + ConversationModel.prototype.endpointPath = function () { + return "".concat(ConversationModels_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); + }; + return ConversationModel; +}()); +exports.default = ConversationModel; +//# sourceMappingURL=ConversationModel.js.map \ No newline at end of file diff --git a/lib/Typesense/ConversationModel.js.map b/lib/Typesense/ConversationModel.js.map new file mode 100644 index 00000000..c9b6a197 --- /dev/null +++ b/lib/Typesense/ConversationModel.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ConversationModel.js","sourceRoot":"","sources":["../../src/Typesense/ConversationModel.ts"],"names":[],"mappings":";;;AACA,oFAAsD;AAmBtD;IACE,2BACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,kCAAM,GAAZ,UACE,MAAqC;;;gBAErC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,EAAC;;;KACH;IAEK,oCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEK,kCAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,IAAI,CAAC,YAAY,EAAE,CACpB,EAAC;;;KACH;IAEO,wCAAY,GAApB;QACE,OAAO,UAAG,4BAAkB,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;IAC7E,CAAC;IACH,wBAAC;AAAD,CAAC,AA5BD,IA4BC"} \ No newline at end of file diff --git a/lib/Typesense/ConversationModels.d.ts b/lib/Typesense/ConversationModels.d.ts new file mode 100644 index 00000000..8a6ef4c4 --- /dev/null +++ b/lib/Typesense/ConversationModels.d.ts @@ -0,0 +1,10 @@ +import ApiCall from "./ApiCall"; +import { ConversationModelCreateSchema, ConversationModelSchema } from "./ConversationModel"; +export default class ConversationModels { + private readonly apiCall; + constructor(apiCall: ApiCall); + create(params: ConversationModelCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/ConversationModels.js b/lib/Typesense/ConversationModels.js new file mode 100644 index 00000000..29563fc5 --- /dev/null +++ b/lib/Typesense/ConversationModels.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RESOURCEPATH = "/conversations/models"; +var ConversationModels = /** @class */ (function () { + function ConversationModels(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + ConversationModels.prototype.create = function (params) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.post(this.endpointPath(), params)]; + }); + }); + }; + ConversationModels.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + ConversationModels.prototype.endpointPath = function (operation) { + return "".concat(ConversationModels.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); + }; + Object.defineProperty(ConversationModels, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return ConversationModels; +}()); +exports.default = ConversationModels; +//# sourceMappingURL=ConversationModels.js.map \ No newline at end of file diff --git a/lib/Typesense/ConversationModels.js.map b/lib/Typesense/ConversationModels.js.map new file mode 100644 index 00000000..3c3b1bc0 --- /dev/null +++ b/lib/Typesense/ConversationModels.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ConversationModels.js","sourceRoot":"","sources":["../../src/Typesense/ConversationModels.ts"],"names":[],"mappings":";;;AAMA,IAAM,YAAY,GAAG,uBAAuB,CAAC;AAE7C;IACE,4BAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,mCAAM,GAAZ,UACE,MAAqC;;;gBAErC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,EAAC;;;KACH;IAEK,qCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,CACpB,EAAC;;;KACH;IAEO,yCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,kBAAkB,CAAC,YAAY,SACvC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,kCAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,yBAAC;AAAD,CAAC,AA7BD,IA6BC"} \ No newline at end of file diff --git a/lib/Typesense/Conversations.d.ts b/lib/Typesense/Conversations.d.ts new file mode 100644 index 00000000..5a4b8dc9 --- /dev/null +++ b/lib/Typesense/Conversations.d.ts @@ -0,0 +1,17 @@ +import ApiCall from "./ApiCall"; +import ConversationModels from "./ConversationModels"; +import ConversationModel from "./ConversationModel"; +import { ConversationSchema } from "./Conversation"; +export interface ConversationsRetrieveSchema { + conversations: ConversationSchema[]; +} +export default class Conversations { + private readonly apiCall; + private readonly _conversationsModels; + private readonly individualConversationModels; + constructor(apiCall: ApiCall); + retrieve(): Promise; + models(): ConversationModels; + models(id: string): ConversationModel; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/Conversations.js b/lib/Typesense/Conversations.js new file mode 100644 index 00000000..69e67c4d --- /dev/null +++ b/lib/Typesense/Conversations.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var ConversationModels_1 = tslib_1.__importDefault(require("./ConversationModels")); +var ConversationModel_1 = tslib_1.__importDefault(require("./ConversationModel")); +var RESOURCEPATH = "/conversations"; +var Conversations = /** @class */ (function () { + function Conversations(apiCall) { + this.apiCall = apiCall; + this.individualConversationModels = {}; + this.apiCall = apiCall; + this._conversationsModels = new ConversationModels_1.default(this.apiCall); + } + Conversations.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; + }); + }); + }; + Conversations.prototype.models = function (id) { + if (id === undefined) { + return this._conversationsModels; + } + else { + if (this.individualConversationModels[id] === undefined) { + this.individualConversationModels[id] = new ConversationModel_1.default(id, this.apiCall); + } + return this.individualConversationModels[id]; + } + }; + Object.defineProperty(Conversations, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return Conversations; +}()); +exports.default = Conversations; +//# sourceMappingURL=Conversations.js.map \ No newline at end of file diff --git a/lib/Typesense/Conversations.js.map b/lib/Typesense/Conversations.js.map new file mode 100644 index 00000000..899cd545 --- /dev/null +++ b/lib/Typesense/Conversations.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Conversations.js","sourceRoot":"","sources":["../../src/Typesense/Conversations.ts"],"names":[],"mappings":";;;AACA,oFAAsD;AACtD,kFAAoD;AAGpD,IAAM,YAAY,GAAG,gBAAgB,CAAC;AAMtC;IAOE,uBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAL5B,iCAA4B,GAGzC,EAAE,CAAC;QAGL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,oBAAoB,GAAG,IAAI,4BAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAEK,gCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA8B,YAAY,CAAC,EAAC;;;KACpE;IAID,8BAAM,GAAN,UAAO,EAAW;QAChB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBACxD,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,GAAG,IAAI,2BAAiB,CAC3D,EAAE,EACF,IAAI,CAAC,OAAO,CACb,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,sBAAW,6BAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,oBAAC;AAAD,CAAC,AAnCD,IAmCC"} \ No newline at end of file diff --git a/lib/Typesense/Debug.d.ts b/lib/Typesense/Debug.d.ts new file mode 100644 index 00000000..ac0f44d4 --- /dev/null +++ b/lib/Typesense/Debug.d.ts @@ -0,0 +1,10 @@ +import ApiCall from "./ApiCall"; +export interface DebugResponseSchema { + state: number; + version: string; +} +export default class Debug { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} diff --git a/lib/Typesense/Debug.js b/lib/Typesense/Debug.js new file mode 100644 index 00000000..fa525663 --- /dev/null +++ b/lib/Typesense/Debug.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RESOURCEPATH = "/debug"; +var Debug = /** @class */ (function () { + function Debug(apiCall) { + this.apiCall = apiCall; + } + Debug.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; + }); + }); + }; + return Debug; +}()); +exports.default = Debug; +//# sourceMappingURL=Debug.js.map \ No newline at end of file diff --git a/lib/Typesense/Debug.js.map b/lib/Typesense/Debug.js.map new file mode 100644 index 00000000..30283311 --- /dev/null +++ b/lib/Typesense/Debug.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Debug.js","sourceRoot":"","sources":["../../src/Typesense/Debug.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,QAAQ,CAAC;AAO9B;IACE,eAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,wBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAsB,YAAY,CAAC,EAAC;;;KAC5D;IACH,YAAC;AAAD,CAAC,AAND,IAMC"} \ No newline at end of file diff --git a/lib/Typesense/Document.d.ts b/lib/Typesense/Document.d.ts new file mode 100644 index 00000000..9f3fff02 --- /dev/null +++ b/lib/Typesense/Document.d.ts @@ -0,0 +1,12 @@ +import ApiCall from "./ApiCall"; +import { DeleteQuery, DocumentSchema, DocumentWriteParameters } from "./Documents"; +export declare class Document { + private collectionName; + private documentId; + private apiCall; + constructor(collectionName: string, documentId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(options?: DeleteQuery): Promise; + update(partialDocument: Partial, options?: DocumentWriteParameters): Promise; + private endpointPath; +} diff --git a/lib/Typesense/Document.js b/lib/Typesense/Document.js new file mode 100644 index 00000000..fc7f8f4e --- /dev/null +++ b/lib/Typesense/Document.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Document = void 0; +var tslib_1 = require("tslib"); +var Collections_1 = tslib_1.__importDefault(require("./Collections")); +var Documents_1 = tslib_1.__importDefault(require("./Documents")); +var Document = /** @class */ (function () { + function Document(collectionName, documentId, apiCall) { + this.collectionName = collectionName; + this.documentId = documentId; + this.apiCall = apiCall; + } + Document.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Document.prototype.delete = function (options) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.delete(this.endpointPath(), options)]; + }); + }); + }; + Document.prototype.update = function (partialDocument_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (partialDocument, options) { + if (options === void 0) { options = {}; } + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.patch(this.endpointPath(), partialDocument, options)]; + }); + }); + }; + Document.prototype.endpointPath = function () { + return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Documents_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.documentId)); + }; + return Document; +}()); +exports.Document = Document; +//# sourceMappingURL=Document.js.map \ No newline at end of file diff --git a/lib/Typesense/Document.js.map b/lib/Typesense/Document.js.map new file mode 100644 index 00000000..d7129738 --- /dev/null +++ b/lib/Typesense/Document.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Document.js","sourceRoot":"","sources":["../../src/Typesense/Document.ts"],"names":[],"mappings":";;;;AACA,sEAAwC;AACxC,kEAIqB;AAErB;IACE,kBACU,cAAsB,EACtB,UAAkB,EAClB,OAAgB;QAFhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,2BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAI,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACjD;IAEK,yBAAM,GAAZ,UAAa,OAAqB;;;gBAChC,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAI,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,EAAC;;;KAC7D;IAEK,yBAAM,GAAZ;oEACE,eAA2B,EAC3B,OAAqC;YAArC,wBAAA,EAAA,YAAqC;;gBAErC,sBAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAI,IAAI,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,EAAC;;;KAC7E;IAEO,+BAAY,GAApB;QACE,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAG,mBAAS,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAE,CAAC;IAClJ,CAAC;IACH,eAAC;AAAD,CAAC,AAzBD,IAyBC;AAzBY,4BAAQ"} \ No newline at end of file diff --git a/lib/Typesense/Documents.d.ts b/lib/Typesense/Documents.d.ts new file mode 100644 index 00000000..339b07f2 --- /dev/null +++ b/lib/Typesense/Documents.d.ts @@ -0,0 +1,260 @@ +import type { ReadStream } from "fs"; +import ApiCall from "./ApiCall"; +import Configuration from "./Configuration"; +import { SearchOnlyDocuments } from "./SearchOnlyDocuments"; +export type DeleteQuery = { + truncate?: true; +} | { + truncate?: never; + filter_by?: string; + batch_size?: number; + ignore_not_found?: boolean; +}; +export interface DeleteResponse { + num_deleted: number; +} +interface ImportResponseSuccess { + success: true; +} +export interface ImportResponseFail { + success: false; + error: string; + document: DocumentSchema; + code: number; +} +export type ImportResponse = ImportResponseSuccess | ImportResponseFail; +export type DocumentSchema = Record; +export interface SearchParamsWithPreset extends Partial { + preset: string; +} +export type DropTokensMode = "right_to_left" | "left_to_right" | "both_sides:3"; +export type OperationMode = "off" | "always" | "fallback"; +export type UnionArrayKeys = { + [K in keyof T]: T[K] extends undefined ? never : NonNullable extends infer R ? R extends R[] ? never : R extends (infer U)[] | infer U ? U[] extends R ? K : never : never : never; +}[keyof T] & keyof T; +export type UnionArraySearchParams = UnionArrayKeys; +export type ArraybleParams = { + readonly [K in UnionArraySearchParams]: string; +}; +export type ExtractBaseTypes = { + [K in keyof T]: K extends UnionArrayKeys ? T[K] extends (infer U)[] | infer U ? U : T[K] : T[K]; +}; +export declare const arrayableParams: ArraybleParams; +export interface SearchParams { + q?: "*" | (string & {}); + query_by?: string | string[]; + query_by_weights?: string | number[]; + prefix?: string | boolean | boolean[]; + filter_by?: string; + max_filter_by_candidates?: number; + enable_synonyms?: boolean; + enable_analytics?: boolean; + filter_curated_hits?: boolean; + enable_lazy_filter?: boolean; + sort_by?: string | string[]; + facet_by?: string | string[]; + max_facet_values?: number; + facet_sample_threshold?: number; + facet_sample_percent?: number; + facet_query?: string; + facet_query_num_typos?: number; + facet_return_parent?: string; + facet_strategy?: "exhaustive" | "top_values" | "automatic"; + page?: number; + per_page?: number; + group_by?: string | string[]; + group_limit?: number; + group_missing_values?: boolean; + include_fields?: string | string[]; + exclude_fields?: string | string[]; + highlight_fields?: string | string[]; + highlight_full_fields?: string | string[]; + highlight_affix_num_tokens?: number; + highlight_start_tag?: string; + highlight_end_tag?: string; + enable_highlight_v1?: boolean; + snippet_threshold?: number; + num_typos?: string | number | number[]; + min_len_1typo?: number; + min_len_2typo?: number; + split_join_tokens?: OperationMode; + exhaustive_search?: boolean; + drop_tokens_threshold?: number; + drop_tokens_mode?: DropTokensMode; + typo_tokens_threshold?: number; + pinned_hits?: string | string[]; + hidden_hits?: string | string[]; + limit_hits?: number; + pre_segmented_query?: boolean; + enable_overrides?: boolean; + override_tags?: string | string[]; + prioritize_exact_match?: boolean; + prioritize_token_position?: boolean; + prioritize_num_matching_fields?: boolean; + search_cutoff_ms?: number; + use_cache?: boolean; + max_candidates?: number; + infix?: OperationMode | OperationMode[]; + preset?: string; + text_match_type?: "max_score" | "max_weight"; + vector_query?: string; + "x-typesense-api-key"?: string; + "x-typesense-user-id"?: string; + offset?: number; + limit?: number; + stopwords?: string; + conversation?: boolean; + conversation_model_id?: string; + conversation_id?: string; + voice_query?: string; +} +type SearchResponseHighlightObject = { + matched_tokens?: string[]; + snippet?: string; + value?: string; +}; +export type SearchResponseHighlight = T extends string | number ? SearchResponseHighlightObject : { + [TAttribute in keyof T]?: SearchResponseHighlight; +}; +export interface SearchResponseHit { + curated?: true; + highlights?: [ + { + field: keyof T; + snippet?: string; + value?: string; + snippets?: string[]; + indices?: number[]; + matched_tokens: string[][] | string[]; + } + ]; + highlight: SearchResponseHighlight; + document: T; + text_match: number; + text_match_info?: { + best_field_score: `${number}`; + best_field_weight: number; + fields_matched: number; + score: `${number}`; + tokens_matched: number; + }; +} +export interface SearchResponseFacetCountSchema { + counts: { + count: number; + highlighted: string; + value: string; + }[]; + field_name: keyof T; + stats: { + avg?: number; + max?: number; + min?: number; + sum?: number; + }; +} +export interface SearchResponseRequestParams { + collection_name?: string; + q?: string; + page?: number; + per_page?: number; + first_q?: string; + voice_query?: { + transcribed_query?: string; + }; +} +export interface SearchResponse { + facet_counts?: SearchResponseFacetCountSchema[]; + found: number; + found_docs?: number; + out_of: number; + page: number; + request_params: SearchResponseRequestParams; + search_time_ms: number; + search_cutoff?: boolean; + hits?: SearchResponseHit[]; + grouped_hits?: { + group_key: string[]; + hits: SearchResponseHit[]; + found?: number; + }[]; + conversation?: { + answer: string; + conversation_history: { + conversation: object[]; + id: string; + last_updated: number; + ttl: number; + }; + conversation_id: string; + query: string; + }; + error?: string; + code?: number; +} +export interface DocumentWriteParameters { + dirty_values?: "coerce_or_reject" | "coerce_or_drop" | "drop" | "reject"; + action?: "create" | "update" | "upsert" | "emplace"; +} +export interface UpdateByFilterParameters { + filter_by?: string; +} +export interface UpdateByFilterResponse { + num_updated: number; +} +export interface DocumentImportParameters extends DocumentWriteParameters { + batch_size?: number; + return_doc?: boolean; + return_id?: boolean; +} +export interface DocumentsExportParameters { + filter_by?: string; + include_fields?: string; + exclude_fields?: string; +} +export interface SearchableDocuments { + search(searchParameters: SearchParams | SearchParamsWithPreset, options: SearchOptions): Promise>; + clearCache(): void; +} +export interface WriteableDocuments { + create(document: T, options: DocumentWriteParameters): Promise; + upsert(document: T, options: DocumentWriteParameters): Promise; + update(document: T, options: DocumentWriteParameters): Promise; + delete(query: DeleteQuery): Promise; + import(documents: T[] | string, options: DocumentWriteParameters): Promise; + export(options: DocumentsExportParameters): Promise; +} +export interface SearchOptions { + cacheSearchResultsForSeconds?: number; + abortSignal?: AbortSignal | null; +} +export default class Documents extends SearchOnlyDocuments implements WriteableDocuments { + constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); + create(document: T, options?: DocumentWriteParameters): Promise; + upsert(document: T, options?: DocumentWriteParameters): Promise; + update(document: T, options: UpdateByFilterParameters): Promise; + update(document: T, options: DocumentWriteParameters): Promise; + delete(query?: DeleteQuery): Promise; + createMany(documents: T[], options?: DocumentImportParameters): Promise; + /** + * Import a set of documents in a batch. + * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects. + * @param options + * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results. + */ + import(documents: string, options?: DocumentImportParameters): Promise; + import(documents: T[], options?: DocumentImportParameters): Promise; + /** + * Imports documents from a NodeJS readable stream of JSONL. + */ + importStream(readableStream: ReadStream, options?: DocumentImportParameters): Promise; + /** + * Returns a JSONL string for all the documents in this collection + */ + export(options?: DocumentsExportParameters): Promise; + /** + * Returns a NodeJS readable stream of JSONL for all the documents in this collection. + */ + exportStream(options?: DocumentsExportParameters): Promise; +} +export {}; diff --git a/lib/Typesense/Documents.js b/lib/Typesense/Documents.js new file mode 100644 index 00000000..6c2d572b --- /dev/null +++ b/lib/Typesense/Documents.js @@ -0,0 +1,210 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.arrayableParams = void 0; +var tslib_1 = require("tslib"); +var Errors_1 = require("./Errors"); +var SearchOnlyDocuments_1 = require("./SearchOnlyDocuments"); +exports.arrayableParams = { + query_by: "query_by", + query_by_weights: "query_by_weights", + facet_by: "facet_by", + group_by: "group_by", + include_fields: "include_fields", + exclude_fields: "exclude_fields", + highlight_fields: "highlight_fields", + highlight_full_fields: "highlight_full_fields", + pinned_hits: "pinned_hits", + hidden_hits: "hidden_hits", + infix: "infix", + override_tags: "override_tags", + num_typos: "num_typos", + prefix: "prefix", + sort_by: "sort_by", +}; +var isNodeJSEnvironment = typeof process !== "undefined" && + process.versions != null && + process.versions.node != null; +var Documents = /** @class */ (function (_super) { + tslib_1.__extends(Documents, _super); + function Documents(collectionName, apiCall, configuration) { + return _super.call(this, collectionName, apiCall, configuration) || this; + } + Documents.prototype.create = function (document_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (document, options) { + if (options === void 0) { options = {}; } + return tslib_1.__generator(this, function (_a) { + if (!document) + throw new Error("No document provided"); + return [2 /*return*/, this.apiCall.post(this.endpointPath(), document, options)]; + }); + }); + }; + Documents.prototype.upsert = function (document_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (document, options) { + if (options === void 0) { options = {}; } + return tslib_1.__generator(this, function (_a) { + if (!document) + throw new Error("No document provided"); + return [2 /*return*/, this.apiCall.post(this.endpointPath(), document, Object.assign({}, options, { action: "upsert" }))]; + }); + }); + }; + Documents.prototype.update = function (document_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (document, options) { + if (options === void 0) { options = {}; } + return tslib_1.__generator(this, function (_a) { + if (!document) + throw new Error("No document provided"); + if (options["filter_by"] != null) { + return [2 /*return*/, this.apiCall.patch(this.endpointPath(), document, Object.assign({}, options))]; + } + else { + return [2 /*return*/, this.apiCall.post(this.endpointPath(), document, Object.assign({}, options, { action: "update" }))]; + } + return [2 /*return*/]; + }); + }); + }; + Documents.prototype.delete = function () { + return tslib_1.__awaiter(this, arguments, void 0, function (query) { + if (query === void 0) { query = {}; } + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.delete(this.endpointPath(), query)]; + }); + }); + }; + Documents.prototype.createMany = function (documents_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (documents, options) { + if (options === void 0) { options = {}; } + return tslib_1.__generator(this, function (_a) { + this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"); + return [2 /*return*/, this.import(documents, options)]; + }); + }); + }; + Documents.prototype.import = function (documents_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (documents, options) { + var documentsInJSONLFormat, resultsInJSONLFormat, resultsInJSONFormat, failedItems; + if (options === void 0) { options = {}; } + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + if (Array.isArray(documents)) { + try { + documentsInJSONLFormat = documents + .map(function (document) { return JSON.stringify(document); }) + .join("\n"); + } + catch (error) { + // if rangeerror, throw custom error message + if (error instanceof RangeError && + error.message.includes("Too many properties to enumerate")) { + throw new Error("".concat(error, "\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n ")); + } + // else, throw the non-range error anyways + throw new Error(error); + } + } + else { + documentsInJSONLFormat = documents; + } + return [4 /*yield*/, this.apiCall.performRequest("post", this.endpointPath("import"), { + queryParameters: options, + bodyParameters: documentsInJSONLFormat, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully + enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 + })]; + case 1: + resultsInJSONLFormat = _a.sent(); + if (Array.isArray(documents)) { + resultsInJSONFormat = resultsInJSONLFormat + .split("\n") + .map(function (r) { return JSON.parse(r); }); + failedItems = resultsInJSONFormat.filter(function (r) { return r.success === false; }); + if (failedItems.length > 0) { + throw new Errors_1.ImportError("".concat(resultsInJSONFormat.length - failedItems.length, " documents imported successfully, ").concat(failedItems.length, " documents failed during import. Use `error.importResults` from the raised exception to get a detailed error reason for each document."), resultsInJSONFormat, { + documentsInJSONLFormat: documentsInJSONLFormat, + options: options, + failedItems: failedItems, + successCount: resultsInJSONFormat.length - failedItems.length, + }); + } + else { + return [2 /*return*/, resultsInJSONFormat]; + } + } + else { + return [2 /*return*/, resultsInJSONLFormat]; + } + return [2 /*return*/]; + } + }); + }); + }; + /** + * Imports documents from a NodeJS readable stream of JSONL. + */ + Documents.prototype.importStream = function (readableStream_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (readableStream, options) { + var resultsInJSONLFormat, resultsInJSONFormat, failedItems; + if (options === void 0) { options = {}; } + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.apiCall.performRequest("post", this.endpointPath("import"), { + queryParameters: options, + bodyParameters: readableStream, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully + enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 + })]; + case 1: + resultsInJSONLFormat = _a.sent(); + resultsInJSONFormat = resultsInJSONLFormat + .split("\n") + .map(function (r) { return JSON.parse(r); }); + failedItems = resultsInJSONFormat.filter(function (r) { return r.success === false; }); + if (failedItems.length > 0) { + throw new Errors_1.ImportError("".concat(resultsInJSONFormat.length - failedItems.length, " documents imported successfully, ").concat(failedItems.length, " documents failed during import. Use `error.importResults` from the raised exception to get a detailed error reason for each document."), resultsInJSONFormat, { + documentsInJSONLFormat: readableStream, + options: options, + failedItems: failedItems, + successCount: resultsInJSONFormat.length - failedItems.length, + }); + } + else { + return [2 /*return*/, resultsInJSONFormat]; + } + return [2 /*return*/]; + } + }); + }); + }; + /** + * Returns a JSONL string for all the documents in this collection + */ + Documents.prototype.export = function () { + return tslib_1.__awaiter(this, arguments, void 0, function (options) { + if (options === void 0) { options = {}; } + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath("export"), options)]; + }); + }); + }; + /** + * Returns a NodeJS readable stream of JSONL for all the documents in this collection. + */ + Documents.prototype.exportStream = function () { + return tslib_1.__awaiter(this, arguments, void 0, function (options) { + if (options === void 0) { options = {}; } + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath("export"), options, { + responseType: "stream", + })]; + }); + }); + }; + return Documents; +}(SearchOnlyDocuments_1.SearchOnlyDocuments)); +exports.default = Documents; +//# sourceMappingURL=Documents.js.map \ No newline at end of file diff --git a/lib/Typesense/Documents.js.map b/lib/Typesense/Documents.js.map new file mode 100644 index 00000000..d923e1ec --- /dev/null +++ b/lib/Typesense/Documents.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Documents.js","sourceRoot":"","sources":["../../src/Typesense/Documents.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Errors/HTTPError.d.ts b/lib/Typesense/Errors/HTTPError.d.ts new file mode 100644 index 00000000..499e415a --- /dev/null +++ b/lib/Typesense/Errors/HTTPError.d.ts @@ -0,0 +1,3 @@ +import TypesenseError from "./TypesenseError"; +export default class HTTPError extends TypesenseError { +} diff --git a/lib/Typesense/Errors/HTTPError.js b/lib/Typesense/Errors/HTTPError.js new file mode 100644 index 00000000..aabc1054 --- /dev/null +++ b/lib/Typesense/Errors/HTTPError.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +var HTTPError = /** @class */ (function (_super) { + tslib_1.__extends(HTTPError, _super); + function HTTPError() { + return _super !== null && _super.apply(this, arguments) || this; + } + return HTTPError; +}(TypesenseError_1.default)); +exports.default = HTTPError; +//# sourceMappingURL=HTTPError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/HTTPError.js.map b/lib/Typesense/Errors/HTTPError.js.map new file mode 100644 index 00000000..e9ca4f58 --- /dev/null +++ b/lib/Typesense/Errors/HTTPError.js.map @@ -0,0 +1 @@ +{"version":3,"file":"HTTPError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/HTTPError.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAuC,qCAAc;IAArD;;IAAuD,CAAC;IAAD,gBAAC;AAAD,CAAC,AAAxD,CAAuC,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ImportError.d.ts b/lib/Typesense/Errors/ImportError.d.ts new file mode 100644 index 00000000..d6abbc85 --- /dev/null +++ b/lib/Typesense/Errors/ImportError.d.ts @@ -0,0 +1,15 @@ +import TypesenseError from "./TypesenseError"; +import type { DocumentImportParameters, ImportResponse } from "../Documents"; +import { ReadStream } from "node:fs"; +interface ImportErrorPayload { + documentsInJSONLFormat: string | ReadStream; + options: DocumentImportParameters; + failedItems: ImportResponse[]; + successCount: number; +} +export default class ImportError extends TypesenseError { + payload: ImportErrorPayload; + importResults: ImportResponse[]; + constructor(message: string, importResults: ImportResponse[], payload: ImportErrorPayload); +} +export {}; diff --git a/lib/Typesense/Errors/ImportError.js b/lib/Typesense/Errors/ImportError.js new file mode 100644 index 00000000..e9f1eaf0 --- /dev/null +++ b/lib/Typesense/Errors/ImportError.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +var ImportError = /** @class */ (function (_super) { + tslib_1.__extends(ImportError, _super); + function ImportError(message, importResults, payload) { + var _this = _super.call(this, message) || this; + _this.importResults = importResults; + _this.payload = payload; + return _this; + } + return ImportError; +}(TypesenseError_1.default)); +exports.default = ImportError; +//# sourceMappingURL=ImportError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ImportError.js.map b/lib/Typesense/Errors/ImportError.js.map new file mode 100644 index 00000000..d0a8fecf --- /dev/null +++ b/lib/Typesense/Errors/ImportError.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ImportError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ImportError.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAW9C;IAAyC,uCAAc;IAGrD,qBACE,OAAe,EACf,aAA+B,EAC/B,OAA2B;QAE3B,YAAA,MAAK,YAAC,OAAO,CAAC,SAAC;QACf,KAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;;IACzB,CAAC;IACH,kBAAC;AAAD,CAAC,AAZD,CAAyC,wBAAc,GAYtD"} \ No newline at end of file diff --git a/lib/Typesense/Errors/MissingConfigurationError.d.ts b/lib/Typesense/Errors/MissingConfigurationError.d.ts new file mode 100644 index 00000000..7977c65b --- /dev/null +++ b/lib/Typesense/Errors/MissingConfigurationError.d.ts @@ -0,0 +1,3 @@ +import TypesenseError from "./TypesenseError"; +export default class MissingConfigurationError extends TypesenseError { +} diff --git a/lib/Typesense/Errors/MissingConfigurationError.js b/lib/Typesense/Errors/MissingConfigurationError.js new file mode 100644 index 00000000..2161b0ac --- /dev/null +++ b/lib/Typesense/Errors/MissingConfigurationError.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +var MissingConfigurationError = /** @class */ (function (_super) { + tslib_1.__extends(MissingConfigurationError, _super); + function MissingConfigurationError() { + return _super !== null && _super.apply(this, arguments) || this; + } + return MissingConfigurationError; +}(TypesenseError_1.default)); +exports.default = MissingConfigurationError; +//# sourceMappingURL=MissingConfigurationError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/MissingConfigurationError.js.map b/lib/Typesense/Errors/MissingConfigurationError.js.map new file mode 100644 index 00000000..6e2efa82 --- /dev/null +++ b/lib/Typesense/Errors/MissingConfigurationError.js.map @@ -0,0 +1 @@ +{"version":3,"file":"MissingConfigurationError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/MissingConfigurationError.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAuD,qDAAc;IAArE;;IAAuE,CAAC;IAAD,gCAAC;AAAD,CAAC,AAAxE,CAAuD,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectAlreadyExists.d.ts b/lib/Typesense/Errors/ObjectAlreadyExists.d.ts new file mode 100644 index 00000000..92e7e21d --- /dev/null +++ b/lib/Typesense/Errors/ObjectAlreadyExists.d.ts @@ -0,0 +1,3 @@ +import TypesenseError from "./TypesenseError"; +export default class ObjectAlreadyExists extends TypesenseError { +} diff --git a/lib/Typesense/Errors/ObjectAlreadyExists.js b/lib/Typesense/Errors/ObjectAlreadyExists.js new file mode 100644 index 00000000..9f0e6381 --- /dev/null +++ b/lib/Typesense/Errors/ObjectAlreadyExists.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +var ObjectAlreadyExists = /** @class */ (function (_super) { + tslib_1.__extends(ObjectAlreadyExists, _super); + function ObjectAlreadyExists() { + return _super !== null && _super.apply(this, arguments) || this; + } + return ObjectAlreadyExists; +}(TypesenseError_1.default)); +exports.default = ObjectAlreadyExists; +//# sourceMappingURL=ObjectAlreadyExists.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectAlreadyExists.js.map b/lib/Typesense/Errors/ObjectAlreadyExists.js.map new file mode 100644 index 00000000..7e7860b5 --- /dev/null +++ b/lib/Typesense/Errors/ObjectAlreadyExists.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ObjectAlreadyExists.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ObjectAlreadyExists.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAiD,+CAAc;IAA/D;;IAAiE,CAAC;IAAD,0BAAC;AAAD,CAAC,AAAlE,CAAiD,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectNotFound.d.ts b/lib/Typesense/Errors/ObjectNotFound.d.ts new file mode 100644 index 00000000..9408bd6e --- /dev/null +++ b/lib/Typesense/Errors/ObjectNotFound.d.ts @@ -0,0 +1,3 @@ +import TypesenseError from "./TypesenseError"; +export default class ObjectNotFound extends TypesenseError { +} diff --git a/lib/Typesense/Errors/ObjectNotFound.js b/lib/Typesense/Errors/ObjectNotFound.js new file mode 100644 index 00000000..9acaab66 --- /dev/null +++ b/lib/Typesense/Errors/ObjectNotFound.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +var ObjectNotFound = /** @class */ (function (_super) { + tslib_1.__extends(ObjectNotFound, _super); + function ObjectNotFound() { + return _super !== null && _super.apply(this, arguments) || this; + } + return ObjectNotFound; +}(TypesenseError_1.default)); +exports.default = ObjectNotFound; +//# sourceMappingURL=ObjectNotFound.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectNotFound.js.map b/lib/Typesense/Errors/ObjectNotFound.js.map new file mode 100644 index 00000000..e216c403 --- /dev/null +++ b/lib/Typesense/Errors/ObjectNotFound.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ObjectNotFound.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ObjectNotFound.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAA4C,0CAAc;IAA1D;;IAA4D,CAAC;IAAD,qBAAC;AAAD,CAAC,AAA7D,CAA4C,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectUnprocessable.d.ts b/lib/Typesense/Errors/ObjectUnprocessable.d.ts new file mode 100644 index 00000000..f0517f89 --- /dev/null +++ b/lib/Typesense/Errors/ObjectUnprocessable.d.ts @@ -0,0 +1,3 @@ +import TypesenseError from "./TypesenseError"; +export default class ObjectUnprocessable extends TypesenseError { +} diff --git a/lib/Typesense/Errors/ObjectUnprocessable.js b/lib/Typesense/Errors/ObjectUnprocessable.js new file mode 100644 index 00000000..ec3e9866 --- /dev/null +++ b/lib/Typesense/Errors/ObjectUnprocessable.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +var ObjectUnprocessable = /** @class */ (function (_super) { + tslib_1.__extends(ObjectUnprocessable, _super); + function ObjectUnprocessable() { + return _super !== null && _super.apply(this, arguments) || this; + } + return ObjectUnprocessable; +}(TypesenseError_1.default)); +exports.default = ObjectUnprocessable; +//# sourceMappingURL=ObjectUnprocessable.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectUnprocessable.js.map b/lib/Typesense/Errors/ObjectUnprocessable.js.map new file mode 100644 index 00000000..812b7f1c --- /dev/null +++ b/lib/Typesense/Errors/ObjectUnprocessable.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ObjectUnprocessable.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ObjectUnprocessable.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAiD,+CAAc;IAA/D;;IAAiE,CAAC;IAAD,0BAAC;AAAD,CAAC,AAAlE,CAAiD,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/RequestMalformed.d.ts b/lib/Typesense/Errors/RequestMalformed.d.ts new file mode 100644 index 00000000..4d87ac81 --- /dev/null +++ b/lib/Typesense/Errors/RequestMalformed.d.ts @@ -0,0 +1,3 @@ +import TypesenseError from "./TypesenseError"; +export default class RequestMalformed extends TypesenseError { +} diff --git a/lib/Typesense/Errors/RequestMalformed.js b/lib/Typesense/Errors/RequestMalformed.js new file mode 100644 index 00000000..46fb1652 --- /dev/null +++ b/lib/Typesense/Errors/RequestMalformed.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +var RequestMalformed = /** @class */ (function (_super) { + tslib_1.__extends(RequestMalformed, _super); + function RequestMalformed() { + return _super !== null && _super.apply(this, arguments) || this; + } + return RequestMalformed; +}(TypesenseError_1.default)); +exports.default = RequestMalformed; +//# sourceMappingURL=RequestMalformed.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/RequestMalformed.js.map b/lib/Typesense/Errors/RequestMalformed.js.map new file mode 100644 index 00000000..636779b9 --- /dev/null +++ b/lib/Typesense/Errors/RequestMalformed.js.map @@ -0,0 +1 @@ +{"version":3,"file":"RequestMalformed.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/RequestMalformed.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAA8C,4CAAc;IAA5D;;IAA8D,CAAC;IAAD,uBAAC;AAAD,CAAC,AAA/D,CAA8C,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/RequestUnauthorized.d.ts b/lib/Typesense/Errors/RequestUnauthorized.d.ts new file mode 100644 index 00000000..281ad728 --- /dev/null +++ b/lib/Typesense/Errors/RequestUnauthorized.d.ts @@ -0,0 +1,3 @@ +import TypesenseError from "./TypesenseError"; +export default class RequestUnauthorized extends TypesenseError { +} diff --git a/lib/Typesense/Errors/RequestUnauthorized.js b/lib/Typesense/Errors/RequestUnauthorized.js new file mode 100644 index 00000000..ac5f70f9 --- /dev/null +++ b/lib/Typesense/Errors/RequestUnauthorized.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +var RequestUnauthorized = /** @class */ (function (_super) { + tslib_1.__extends(RequestUnauthorized, _super); + function RequestUnauthorized() { + return _super !== null && _super.apply(this, arguments) || this; + } + return RequestUnauthorized; +}(TypesenseError_1.default)); +exports.default = RequestUnauthorized; +//# sourceMappingURL=RequestUnauthorized.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/RequestUnauthorized.js.map b/lib/Typesense/Errors/RequestUnauthorized.js.map new file mode 100644 index 00000000..8764f799 --- /dev/null +++ b/lib/Typesense/Errors/RequestUnauthorized.js.map @@ -0,0 +1 @@ +{"version":3,"file":"RequestUnauthorized.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/RequestUnauthorized.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAiD,+CAAc;IAA/D;;IAAiE,CAAC;IAAD,0BAAC;AAAD,CAAC,AAAlE,CAAiD,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ServerError.d.ts b/lib/Typesense/Errors/ServerError.d.ts new file mode 100644 index 00000000..f89362a1 --- /dev/null +++ b/lib/Typesense/Errors/ServerError.d.ts @@ -0,0 +1,3 @@ +import TypesenseError from "./TypesenseError"; +export default class ServerError extends TypesenseError { +} diff --git a/lib/Typesense/Errors/ServerError.js b/lib/Typesense/Errors/ServerError.js new file mode 100644 index 00000000..e3bf3f15 --- /dev/null +++ b/lib/Typesense/Errors/ServerError.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +var ServerError = /** @class */ (function (_super) { + tslib_1.__extends(ServerError, _super); + function ServerError() { + return _super !== null && _super.apply(this, arguments) || this; + } + return ServerError; +}(TypesenseError_1.default)); +exports.default = ServerError; +//# sourceMappingURL=ServerError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ServerError.js.map b/lib/Typesense/Errors/ServerError.js.map new file mode 100644 index 00000000..bac2216a --- /dev/null +++ b/lib/Typesense/Errors/ServerError.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ServerError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ServerError.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAyC,uCAAc;IAAvD;;IAAyD,CAAC;IAAD,kBAAC;AAAD,CAAC,AAA1D,CAAyC,wBAAc,GAAG"} \ No newline at end of file diff --git a/lib/Typesense/Errors/TypesenseError.d.ts b/lib/Typesense/Errors/TypesenseError.d.ts new file mode 100644 index 00000000..caf9ac73 --- /dev/null +++ b/lib/Typesense/Errors/TypesenseError.d.ts @@ -0,0 +1,5 @@ +export default class TypesenseError extends Error { + httpStatus?: number; + httpBody?: string; + constructor(message?: string, httpBody?: string, httpStatus?: number); +} diff --git a/lib/Typesense/Errors/TypesenseError.js b/lib/Typesense/Errors/TypesenseError.js new file mode 100644 index 00000000..39ad6dfc --- /dev/null +++ b/lib/Typesense/Errors/TypesenseError.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var TypesenseError = /** @class */ (function (_super) { + tslib_1.__extends(TypesenseError, _super); + // Source: https://stackoverflow.com/a/58417721/123545 + function TypesenseError(message, httpBody, httpStatus) { + var _newTarget = this.constructor; + var _this = _super.call(this, message) || this; + _this.name = _newTarget.name; + _this.httpBody = httpBody; + _this.httpStatus = httpStatus; + Object.setPrototypeOf(_this, _newTarget.prototype); + return _this; + } + return TypesenseError; +}(Error)); +exports.default = TypesenseError; +//# sourceMappingURL=TypesenseError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/TypesenseError.js.map b/lib/Typesense/Errors/TypesenseError.js.map new file mode 100644 index 00000000..beab88dc --- /dev/null +++ b/lib/Typesense/Errors/TypesenseError.js.map @@ -0,0 +1 @@ +{"version":3,"file":"TypesenseError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/TypesenseError.ts"],"names":[],"mappings":";;;AAAA;IAA4C,0CAAK;IAI/C,sDAAsD;IACtD,wBAAY,OAAgB,EAAE,QAAiB,EAAE,UAAmB;;QAClE,YAAA,MAAK,YAAC,OAAO,CAAC,SAAC;QACf,KAAI,CAAC,IAAI,GAAG,WAAW,IAAI,CAAC;QAC5B,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,KAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;;IACpD,CAAC;IACH,qBAAC;AAAD,CAAC,AAZD,CAA4C,KAAK,GAYhD"} \ No newline at end of file diff --git a/lib/Typesense/Errors/index.d.ts b/lib/Typesense/Errors/index.d.ts new file mode 100644 index 00000000..e5046195 --- /dev/null +++ b/lib/Typesense/Errors/index.d.ts @@ -0,0 +1,11 @@ +import HTTPError from "./HTTPError"; +import MissingConfigurationError from "./MissingConfigurationError"; +import ObjectAlreadyExists from "./ObjectAlreadyExists"; +import ObjectNotFound from "./ObjectNotFound"; +import ObjectUnprocessable from "./ObjectUnprocessable"; +import RequestMalformed from "./RequestMalformed"; +import RequestUnauthorized from "./RequestUnauthorized"; +import ServerError from "./ServerError"; +import ImportError from "./ImportError"; +import TypesenseError from "./TypesenseError"; +export { HTTPError, MissingConfigurationError, ObjectAlreadyExists, ObjectNotFound, ObjectUnprocessable, RequestMalformed, RequestUnauthorized, ServerError, TypesenseError, ImportError, }; diff --git a/lib/Typesense/Errors/index.js b/lib/Typesense/Errors/index.js new file mode 100644 index 00000000..5740bee1 --- /dev/null +++ b/lib/Typesense/Errors/index.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImportError = exports.TypesenseError = exports.ServerError = exports.RequestUnauthorized = exports.RequestMalformed = exports.ObjectUnprocessable = exports.ObjectNotFound = exports.ObjectAlreadyExists = exports.MissingConfigurationError = exports.HTTPError = void 0; +var tslib_1 = require("tslib"); +var HTTPError_1 = tslib_1.__importDefault(require("./HTTPError")); +exports.HTTPError = HTTPError_1.default; +var MissingConfigurationError_1 = tslib_1.__importDefault(require("./MissingConfigurationError")); +exports.MissingConfigurationError = MissingConfigurationError_1.default; +var ObjectAlreadyExists_1 = tslib_1.__importDefault(require("./ObjectAlreadyExists")); +exports.ObjectAlreadyExists = ObjectAlreadyExists_1.default; +var ObjectNotFound_1 = tslib_1.__importDefault(require("./ObjectNotFound")); +exports.ObjectNotFound = ObjectNotFound_1.default; +var ObjectUnprocessable_1 = tslib_1.__importDefault(require("./ObjectUnprocessable")); +exports.ObjectUnprocessable = ObjectUnprocessable_1.default; +var RequestMalformed_1 = tslib_1.__importDefault(require("./RequestMalformed")); +exports.RequestMalformed = RequestMalformed_1.default; +var RequestUnauthorized_1 = tslib_1.__importDefault(require("./RequestUnauthorized")); +exports.RequestUnauthorized = RequestUnauthorized_1.default; +var ServerError_1 = tslib_1.__importDefault(require("./ServerError")); +exports.ServerError = ServerError_1.default; +var ImportError_1 = tslib_1.__importDefault(require("./ImportError")); +exports.ImportError = ImportError_1.default; +var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +exports.TypesenseError = TypesenseError_1.default; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/index.js.map b/lib/Typesense/Errors/index.js.map new file mode 100644 index 00000000..45d675ea --- /dev/null +++ b/lib/Typesense/Errors/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/index.ts"],"names":[],"mappings":";;;;AAAA,kEAAoC;AAYlC,oBAZK,mBAAS,CAYL;AAXX,kGAAoE;AAYlE,oCAZK,mCAAyB,CAYL;AAX3B,sFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,4EAA8C;AAY5C,yBAZK,wBAAc,CAYL;AAXhB,sFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,gFAAkD;AAYhD,2BAZK,0BAAgB,CAYL;AAXlB,sFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,sEAAwC;AAYtC,sBAZK,qBAAW,CAYL;AAXb,sEAAwC;AAatC,sBAbK,qBAAW,CAaL;AAZb,4EAA8C;AAW5C,yBAXK,wBAAc,CAWL"} \ No newline at end of file diff --git a/lib/Typesense/Health.d.ts b/lib/Typesense/Health.d.ts new file mode 100644 index 00000000..8bf91aa8 --- /dev/null +++ b/lib/Typesense/Health.d.ts @@ -0,0 +1,9 @@ +import ApiCall from "./ApiCall"; +export interface HealthResponse { + ok: boolean; +} +export default class Health { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} diff --git a/lib/Typesense/Health.js b/lib/Typesense/Health.js new file mode 100644 index 00000000..0c28608a --- /dev/null +++ b/lib/Typesense/Health.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RESOURCEPATH = "/health"; +var Health = /** @class */ (function () { + function Health(apiCall) { + this.apiCall = apiCall; + } + Health.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; + }); + }); + }; + return Health; +}()); +exports.default = Health; +//# sourceMappingURL=Health.js.map \ No newline at end of file diff --git a/lib/Typesense/Health.js.map b/lib/Typesense/Health.js.map new file mode 100644 index 00000000..a424ca10 --- /dev/null +++ b/lib/Typesense/Health.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Health.js","sourceRoot":"","sources":["../../src/Typesense/Health.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,SAAS,CAAC;AAM/B;IACE,gBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,yBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAiB,YAAY,CAAC,EAAC;;;KACvD;IACH,aAAC;AAAD,CAAC,AAND,IAMC"} \ No newline at end of file diff --git a/lib/Typesense/Key.d.ts b/lib/Typesense/Key.d.ts new file mode 100644 index 00000000..6b888cf5 --- /dev/null +++ b/lib/Typesense/Key.d.ts @@ -0,0 +1,24 @@ +import ApiCall from "./ApiCall"; +export interface KeyCreateSchema { + actions: string[]; + collections: string[]; + description?: string; + value?: string; + value_prefix?: string; + expires_at?: number; + autodelete?: boolean; +} +export interface KeyDeleteSchema { + id: number; +} +export interface KeySchema extends KeyCreateSchema { + id: number; +} +export default class Key { + private id; + private apiCall; + constructor(id: number, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} diff --git a/lib/Typesense/Key.js b/lib/Typesense/Key.js new file mode 100644 index 00000000..27538455 --- /dev/null +++ b/lib/Typesense/Key.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Keys_1 = tslib_1.__importDefault(require("./Keys")); +var Key = /** @class */ (function () { + function Key(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + Key.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Key.prototype.delete = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; + }); + }); + }; + Key.prototype.endpointPath = function () { + return "".concat(Keys_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); + }; + return Key; +}()); +exports.default = Key; +//# sourceMappingURL=Key.js.map \ No newline at end of file diff --git a/lib/Typesense/Key.js.map b/lib/Typesense/Key.js.map new file mode 100644 index 00000000..4eb8658c --- /dev/null +++ b/lib/Typesense/Key.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Key.js","sourceRoot":"","sources":["../../src/Typesense/Key.ts"],"names":[],"mappings":";;;AACA,wDAA0B;AAoB1B;IACE,aACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,sBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAY,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACzD;IAEK,oBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAkB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAClE;IAEO,0BAAY,GAApB;QACE,OAAO,UAAG,cAAI,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;IAC/D,CAAC;IACH,UAAC;AAAD,CAAC,AAjBD,IAiBC"} \ No newline at end of file diff --git a/lib/Typesense/Keys.d.ts b/lib/Typesense/Keys.d.ts new file mode 100644 index 00000000..ca8817d9 --- /dev/null +++ b/lib/Typesense/Keys.d.ts @@ -0,0 +1,19 @@ +import ApiCall from "./ApiCall"; +import { KeyCreateSchema, KeySchema } from "./Key"; +import { SearchParams } from "./Documents"; +export interface KeysRetrieveSchema { + keys: KeySchema[]; +} +export interface GenerateScopedSearchKeyParams extends Partial { + expires_at?: number; + cache_ttl?: number; + limit_multi_searches?: number; +} +export default class Keys { + private apiCall; + constructor(apiCall: ApiCall); + create(params: KeyCreateSchema): Promise; + retrieve(): Promise; + generateScopedSearchKey(searchKey: string, parameters: GenerateScopedSearchKeyParams): string; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/Keys.js b/lib/Typesense/Keys.js new file mode 100644 index 00000000..55741a65 --- /dev/null +++ b/lib/Typesense/Keys.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var crypto_1 = require("crypto"); +var Utils_1 = require("./Utils"); +var RESOURCEPATH = "/keys"; +var Keys = /** @class */ (function () { + function Keys(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + Keys.prototype.create = function (params) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.post(Keys.RESOURCEPATH, params)]; + }); + }); + }; + Keys.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; + }); + }); + }; + Keys.prototype.generateScopedSearchKey = function (searchKey, parameters) { + // Note: only a key generated with the `documents:search` action will be + // accepted by the server, when usined with the search endpoint. + var normalizedParams = (0, Utils_1.normalizeArrayableParams)(parameters); + var paramsJSON = JSON.stringify(normalizedParams); + var digest = Buffer.from((0, crypto_1.createHmac)("sha256", searchKey).update(paramsJSON).digest("base64")); + var keyPrefix = searchKey.substr(0, 4); + var rawScopedKey = "".concat(digest).concat(keyPrefix).concat(paramsJSON); + return Buffer.from(rawScopedKey).toString("base64"); + }; + Object.defineProperty(Keys, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return Keys; +}()); +exports.default = Keys; +//# sourceMappingURL=Keys.js.map \ No newline at end of file diff --git a/lib/Typesense/Keys.js.map b/lib/Typesense/Keys.js.map new file mode 100644 index 00000000..46be753e --- /dev/null +++ b/lib/Typesense/Keys.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Keys.js","sourceRoot":"","sources":["../../src/Typesense/Keys.ts"],"names":[],"mappings":";;;AAAA,iCAAoC;AAIpC,iCAAmD;AAEnD,IAAM,YAAY,GAAG,OAAO,CAAC;AAY7B;IACE,cAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,qBAAM,GAAZ,UAAa,MAAuB;;;gBAClC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAY,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,EAAC;;;KAChE;IAEK,uBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAqB,YAAY,CAAC,EAAC;;;KAC3D;IAED,sCAAuB,GAAvB,UACE,SAAiB,EACjB,UAAyC;QAEzC,wEAAwE;QACxE,gEAAgE;QAChE,IAAM,gBAAgB,GAAG,IAAA,gCAAwB,EAAC,UAAU,CAAC,CAAC;QAC9D,IAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACxB,IAAA,mBAAU,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CACpE,CAAC;QACF,IAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,IAAM,YAAY,GAAG,UAAG,MAAM,SAAG,SAAS,SAAG,UAAU,CAAE,CAAC;QAE1D,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,sBAAW,oBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,WAAC;AAAD,CAAC,AAjCD,IAiCC"} \ No newline at end of file diff --git a/lib/Typesense/Metrics.d.ts b/lib/Typesense/Metrics.d.ts new file mode 100644 index 00000000..e2aa4210 --- /dev/null +++ b/lib/Typesense/Metrics.d.ts @@ -0,0 +1,25 @@ +import ApiCall from "./ApiCall"; +export interface MetricsResponse { + [key: `system_cpu${number}_active_percentage`]: string; + system_cpu_active_percentage: string; + system_disk_total_bytes: string; + system_disk_used_bytes: string; + system_memory_total_bytes: string; + system_memory_total_swap_bytes?: string; + system_memory_used_bytes: string; + system_memory_used_swap_bytes?: string; + system_network_received_bytes: string; + system_network_sent_bytes: string; + typesense_memory_active_bytes: string; + typesense_memory_allocated_bytes: string; + typesense_memory_fragmentation_ratio: string; + typesense_memory_mapped_bytes: string; + typesense_memory_metadata_bytes: string; + typesense_memory_resident_bytes: string; + typesense_memory_retained_bytes: string; +} +export default class Metrics { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} diff --git a/lib/Typesense/Metrics.js b/lib/Typesense/Metrics.js new file mode 100644 index 00000000..9c564425 --- /dev/null +++ b/lib/Typesense/Metrics.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RESOURCEPATH = "/metrics.json"; +var Metrics = /** @class */ (function () { + function Metrics(apiCall) { + this.apiCall = apiCall; + } + Metrics.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; + }); + }); + }; + return Metrics; +}()); +exports.default = Metrics; +//# sourceMappingURL=Metrics.js.map \ No newline at end of file diff --git a/lib/Typesense/Metrics.js.map b/lib/Typesense/Metrics.js.map new file mode 100644 index 00000000..55e1f29e --- /dev/null +++ b/lib/Typesense/Metrics.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Metrics.js","sourceRoot":"","sources":["../../src/Typesense/Metrics.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,eAAe,CAAC;AAsBrC;IACE,iBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC;;;KACvC;IACH,cAAC;AAAD,CAAC,AAND,IAMC"} \ No newline at end of file diff --git a/lib/Typesense/MultiSearch.d.ts b/lib/Typesense/MultiSearch.d.ts new file mode 100644 index 00000000..3df5e785 --- /dev/null +++ b/lib/Typesense/MultiSearch.d.ts @@ -0,0 +1,34 @@ +import ApiCall from "./ApiCall"; +import Configuration from "./Configuration"; +import { DocumentSchema, SearchParams, SearchParamsWithPreset, SearchResponse } from "./Documents"; +export interface MultiSearchRequestSchema extends SearchParams { + collection?: string; + rerank_hybrid_matches?: boolean; + "x-typesense-api-key"?: string; +} +export interface MultiSearchRequestWithPresetSchema extends SearchParamsWithPreset { + collection?: string; + "x-typesense-api-key"?: string; +} +export interface MultiSearchRequestsSchema { + union?: true; + searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[]; +} +export interface MultiSearchResponse { + results: { + [Index in keyof T]: SearchResponse; + } & { + length: T["length"]; + }; +} +export default class MultiSearch { + private apiCall; + private configuration; + private useTextContentType; + private requestWithCache; + constructor(apiCall: ApiCall, configuration: Configuration, useTextContentType?: boolean); + clearCache(): void; + perform(searchRequests: MultiSearchRequestsSchema, commonParams?: Partial, { cacheSearchResultsForSeconds, }?: { + cacheSearchResultsForSeconds?: number; + }): Promise>; +} diff --git a/lib/Typesense/MultiSearch.js b/lib/Typesense/MultiSearch.js new file mode 100644 index 00000000..2f5e72e2 --- /dev/null +++ b/lib/Typesense/MultiSearch.js @@ -0,0 +1,50 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RequestWithCache_1 = tslib_1.__importDefault(require("./RequestWithCache")); +var Utils_1 = require("./Utils"); +var RESOURCEPATH = "/multi_search"; +var MultiSearch = /** @class */ (function () { + function MultiSearch(apiCall, configuration, useTextContentType) { + if (useTextContentType === void 0) { useTextContentType = false; } + this.apiCall = apiCall; + this.configuration = configuration; + this.useTextContentType = useTextContentType; + this.requestWithCache = new RequestWithCache_1.default(); + } + MultiSearch.prototype.clearCache = function () { + this.requestWithCache.clearCache(); + }; + MultiSearch.prototype.perform = function (searchRequests_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (searchRequests, commonParams, _a) { + var additionalHeaders, additionalQueryParams, queryParams, normalizedSearchRequests, normalizedQueryParams; + if (commonParams === void 0) { commonParams = {}; } + var _b = _a === void 0 ? {} : _a, _c = _b.cacheSearchResultsForSeconds, cacheSearchResultsForSeconds = _c === void 0 ? this.configuration + .cacheSearchResultsForSeconds : _c; + return tslib_1.__generator(this, function (_d) { + additionalHeaders = {}; + if (this.useTextContentType) { + additionalHeaders["content-type"] = "text/plain"; + } + additionalQueryParams = {}; + if (this.configuration.useServerSideSearchCache === true) { + additionalQueryParams["use_cache"] = true; + } + queryParams = tslib_1.__assign(tslib_1.__assign({}, commonParams), additionalQueryParams); + normalizedSearchRequests = { + searches: searchRequests.searches.map(Utils_1.normalizeArrayableParams), + }; + normalizedQueryParams = (0, Utils_1.normalizeArrayableParams)(queryParams); + return [2 /*return*/, this.requestWithCache.perform(this.apiCall, this.apiCall.post, [ + RESOURCEPATH, + normalizedSearchRequests, + normalizedQueryParams, + additionalHeaders, + ], { cacheResponseForSeconds: cacheSearchResultsForSeconds })]; + }); + }); + }; + return MultiSearch; +}()); +exports.default = MultiSearch; +//# sourceMappingURL=MultiSearch.js.map \ No newline at end of file diff --git a/lib/Typesense/MultiSearch.js.map b/lib/Typesense/MultiSearch.js.map new file mode 100644 index 00000000..e24a450f --- /dev/null +++ b/lib/Typesense/MultiSearch.js.map @@ -0,0 +1 @@ +{"version":3,"file":"MultiSearch.js","sourceRoot":"","sources":["../../src/Typesense/MultiSearch.ts"],"names":[],"mappings":";;;AAEA,gFAAkD;AAOlD,iCAAmD;AAEnD,IAAM,YAAY,GAAG,eAAe,CAAC;AAyBrC;IAGE,qBACU,OAAgB,EAChB,aAA4B,EAC5B,kBAAmC;QAAnC,mCAAA,EAAA,0BAAmC;QAFnC,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAAe;QAC5B,uBAAkB,GAAlB,kBAAkB,CAAiB;QAE3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,0BAAgB,EAAE,CAAC;IACjD,CAAC;IAED,gCAAU,GAAV;QACE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAEK,6BAAO,GAAb;oEACE,cAAyC,EACzC,YAAoD,EACpD,EAGiD;;YAJjD,6BAAA,EAAA,iBAAoD;gBACpD,qBAG+C,EAAE,KAAA,EAF/C,oCAC+B,EAD/B,4BAA4B,mBAAG,IAAI,CAAC,aAAa;iBAC9C,4BAA4B,KAAA;;gBAG3B,iBAAiB,GAAG,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,iBAAiB,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;gBACnD,CAAC;gBAEK,qBAAqB,GAAG,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,aAAa,CAAC,wBAAwB,KAAK,IAAI,EAAE,CAAC;oBACzD,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;gBAC5C,CAAC;gBAEK,WAAW,yCAAQ,YAAY,GAAK,qBAAqB,CAAE,CAAC;gBAE5D,wBAAwB,GAAG;oBAC/B,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,gCAAwB,CAAC;iBAChE,CAAC;gBAEI,qBAAqB,GAAG,IAAA,gCAAwB,EAAC,WAAW,CAAC,CAAC;gBAEpE,sBAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CAAC,IAAI,EACjB;wBACE,YAAY;wBACZ,wBAAwB;wBACxB,qBAAqB;wBACrB,iBAAiB;qBAClB,EACD,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,CACvB,EAAC;;;KACtC;IACH,kBAAC;AAAD,CAAC,AArDD,IAqDC"} \ No newline at end of file diff --git a/lib/Typesense/Operations.d.ts b/lib/Typesense/Operations.d.ts new file mode 100644 index 00000000..a022bd3a --- /dev/null +++ b/lib/Typesense/Operations.d.ts @@ -0,0 +1,6 @@ +import ApiCall from "./ApiCall"; +export default class Operations { + private apiCall; + constructor(apiCall: ApiCall); + perform(operationName: "vote" | "snapshot" | "cache/clear" | "schema_changes" | (string & {}), queryParameters?: Record): Promise; +} diff --git a/lib/Typesense/Operations.js b/lib/Typesense/Operations.js new file mode 100644 index 00000000..9d42d93b --- /dev/null +++ b/lib/Typesense/Operations.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RESOURCEPATH = "/operations"; +var Operations = /** @class */ (function () { + function Operations(apiCall) { + this.apiCall = apiCall; + } + Operations.prototype.perform = function (operationName_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (operationName, queryParameters) { + if (queryParameters === void 0) { queryParameters = {}; } + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.post("".concat(RESOURCEPATH, "/").concat(operationName), {}, queryParameters)]; + }); + }); + }; + return Operations; +}()); +exports.default = Operations; +//# sourceMappingURL=Operations.js.map \ No newline at end of file diff --git a/lib/Typesense/Operations.js.map b/lib/Typesense/Operations.js.map new file mode 100644 index 00000000..7aa222a9 --- /dev/null +++ b/lib/Typesense/Operations.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Operations.js","sourceRoot":"","sources":["../../src/Typesense/Operations.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,aAAa,CAAC;AAEnC;IACE,oBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,4BAAO,GAAb;oEACE,aAMiB,EACjB,eAAyC;YAAzC,gCAAA,EAAA,oBAAyC;;gBAEzC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,UAAG,YAAY,cAAI,aAAa,CAAE,EAClC,EAAE,EACF,eAAe,CAChB,EAAC;;;KACH;IACH,iBAAC;AAAD,CAAC,AAnBD,IAmBC"} \ No newline at end of file diff --git a/lib/Typesense/Override.d.ts b/lib/Typesense/Override.d.ts new file mode 100644 index 00000000..ee1d99c7 --- /dev/null +++ b/lib/Typesense/Override.d.ts @@ -0,0 +1,17 @@ +import ApiCall from "./ApiCall"; +import { OverrideCreateSchema } from "./Overrides"; +export interface OverrideSchema extends OverrideCreateSchema { + id: string; +} +export interface OverrideDeleteSchema { + id: string; +} +export default class Override { + private collectionName; + private overrideId; + private apiCall; + constructor(collectionName: string, overrideId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} diff --git a/lib/Typesense/Override.js b/lib/Typesense/Override.js new file mode 100644 index 00000000..a2e07e2f --- /dev/null +++ b/lib/Typesense/Override.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Collections_1 = tslib_1.__importDefault(require("./Collections")); +var Overrides_1 = tslib_1.__importDefault(require("./Overrides")); +var Override = /** @class */ (function () { + function Override(collectionName, overrideId, apiCall) { + this.collectionName = collectionName; + this.overrideId = overrideId; + this.apiCall = apiCall; + } + Override.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Override.prototype.delete = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; + }); + }); + }; + Override.prototype.endpointPath = function () { + return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Overrides_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.overrideId)); + }; + return Override; +}()); +exports.default = Override; +//# sourceMappingURL=Override.js.map \ No newline at end of file diff --git a/lib/Typesense/Override.js.map b/lib/Typesense/Override.js.map new file mode 100644 index 00000000..43ae48f8 --- /dev/null +++ b/lib/Typesense/Override.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Override.js","sourceRoot":"","sources":["../../src/Typesense/Override.ts"],"names":[],"mappings":";;;AACA,sEAAwC;AACxC,kEAA8D;AAU9D;IACE,kBACU,cAAsB,EACtB,UAAkB,EAClB,OAAgB;QAFhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,2BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAiB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC9D;IAEK,yBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEO,+BAAY,GAApB;QACE,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAG,mBAAS,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAE,CAAC;IAClJ,CAAC;IACH,eAAC;AAAD,CAAC,AAlBD,IAkBC"} \ No newline at end of file diff --git a/lib/Typesense/Overrides.d.ts b/lib/Typesense/Overrides.d.ts new file mode 100644 index 00000000..1c36b336 --- /dev/null +++ b/lib/Typesense/Overrides.d.ts @@ -0,0 +1,43 @@ +import ApiCall from "./ApiCall"; +import { OverrideSchema } from "./Override"; +export interface OverrideRuleQuerySchema { + query?: string; + match?: "exact" | "contains"; +} +export interface OverrideRuleFilterSchema { + filter_by?: string; +} +export interface OverrideRuleTagsSchema { + tags?: string[]; +} +export interface OverrideCreateSchema { + rule: OverrideRuleQuerySchema & OverrideRuleFilterSchema & OverrideRuleTagsSchema; + filter_by?: string; + sort_by?: string; + remove_matched_tokens?: boolean; + replace_query?: string; + includes?: Array<{ + id: string; + position: number; + }>; + excludes?: Array<{ + id: string; + }>; + filter_curated_hits?: boolean; + effective_from_ts?: number; + effective_to_ts?: number; + stop_processing?: boolean; + metadata?: object; +} +export interface OverridesRetrieveSchema { + overrides: OverrideSchema[]; +} +export default class Overrides { + private collectionName; + private apiCall; + constructor(collectionName: string, apiCall: ApiCall); + upsert(overrideId: string, params: OverrideCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/Overrides.js b/lib/Typesense/Overrides.js new file mode 100644 index 00000000..503c47c1 --- /dev/null +++ b/lib/Typesense/Overrides.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Collections_1 = tslib_1.__importDefault(require("./Collections")); +var RESOURCEPATH = "/overrides"; +var Overrides = /** @class */ (function () { + function Overrides(collectionName, apiCall) { + this.collectionName = collectionName; + this.apiCall = apiCall; + } + Overrides.prototype.upsert = function (overrideId, params) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.put(this.endpointPath(overrideId), params)]; + }); + }); + }; + Overrides.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Overrides.prototype.endpointPath = function (operation) { + return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(this.collectionName).concat(Overrides.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); + }; + Object.defineProperty(Overrides, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return Overrides; +}()); +exports.default = Overrides; +//# sourceMappingURL=Overrides.js.map \ No newline at end of file diff --git a/lib/Typesense/Overrides.js.map b/lib/Typesense/Overrides.js.map new file mode 100644 index 00000000..a7ac0700 --- /dev/null +++ b/lib/Typesense/Overrides.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Overrides.js","sourceRoot":"","sources":["../../src/Typesense/Overrides.ts"],"names":[],"mappings":";;;AACA,sEAAwC;AAGxC,IAAM,YAAY,GAAG,YAAY,CAAC;AAuClC;IACE,mBACU,cAAsB,EACtB,OAAgB;QADhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,0BAAM,GAAZ,UACE,UAAkB,EAClB,MAA4B;;;gBAE5B,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAC7B,MAAM,CACP,EAAC;;;KACH;IAEK,4BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEO,gCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,IAAI,CAAC,cAAc,SACvD,SAAS,CAAC,YAAY,SACrB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAE,CAAC;IAC1E,CAAC;IAED,sBAAW,yBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,gBAAC;AAAD,CAAC,AA7BD,IA6BC"} \ No newline at end of file diff --git a/lib/Typesense/Preset.d.ts b/lib/Typesense/Preset.d.ts new file mode 100644 index 00000000..f9a9415f --- /dev/null +++ b/lib/Typesense/Preset.d.ts @@ -0,0 +1,16 @@ +import ApiCall from "./ApiCall"; +import { PresetCreateSchema } from "./Presets"; +export interface PresetSchema extends PresetCreateSchema { + name: string; +} +export interface PresetDeleteSchema { + name: string; +} +export default class Preset { + private presetId; + private apiCall; + constructor(presetId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} diff --git a/lib/Typesense/Preset.js b/lib/Typesense/Preset.js new file mode 100644 index 00000000..1f9f7d84 --- /dev/null +++ b/lib/Typesense/Preset.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Presets_1 = tslib_1.__importDefault(require("./Presets")); +var Preset = /** @class */ (function () { + function Preset(presetId, apiCall) { + this.presetId = presetId; + this.apiCall = apiCall; + } + Preset.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Preset.prototype.delete = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; + }); + }); + }; + Preset.prototype.endpointPath = function () { + return "".concat(Presets_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.presetId)); + }; + return Preset; +}()); +exports.default = Preset; +//# sourceMappingURL=Preset.js.map \ No newline at end of file diff --git a/lib/Typesense/Preset.js.map b/lib/Typesense/Preset.js.map new file mode 100644 index 00000000..a1d77dcb --- /dev/null +++ b/lib/Typesense/Preset.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Preset.js","sourceRoot":"","sources":["../../src/Typesense/Preset.ts"],"names":[],"mappings":";;;AACA,8DAAwD;AAUxD;IACE,gBAAoB,QAAgB,EAAU,OAAgB;QAA1C,aAAQ,GAAR,QAAQ,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAE5D,yBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAe,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC5D;IAEK,uBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAqB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACrE;IAEO,6BAAY,GAApB;QACE,OAAO,UAAG,iBAAO,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAE,CAAC;IACxE,CAAC;IACH,aAAC;AAAD,CAAC,AAdD,IAcC"} \ No newline at end of file diff --git a/lib/Typesense/Presets.d.ts b/lib/Typesense/Presets.d.ts new file mode 100644 index 00000000..83491421 --- /dev/null +++ b/lib/Typesense/Presets.d.ts @@ -0,0 +1,18 @@ +import ApiCall from "./ApiCall"; +import { PresetSchema } from "./Preset"; +import { SearchParams } from "./Documents"; +import { MultiSearchRequestsSchema } from "./MultiSearch"; +export interface PresetCreateSchema { + value: SearchParams | MultiSearchRequestsSchema; +} +export interface PresetsRetrieveSchema { + presets: PresetSchema[]; +} +export default class Presets { + private apiCall; + constructor(apiCall: ApiCall); + upsert(presetId: string, params: PresetCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/Presets.js b/lib/Typesense/Presets.js new file mode 100644 index 00000000..c780d6e0 --- /dev/null +++ b/lib/Typesense/Presets.js @@ -0,0 +1,49 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Utils_1 = require("./Utils"); +var RESOURCEPATH = "/presets"; +var Presets = /** @class */ (function () { + function Presets(apiCall) { + this.apiCall = apiCall; + } + Presets.prototype.upsert = function (presetId, params) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var normalizedParams_1, normalizedParams; + return tslib_1.__generator(this, function (_a) { + if (typeof params.value === "object" && "searches" in params.value) { + normalizedParams_1 = params.value.searches.map(function (search) { + return (0, Utils_1.normalizeArrayableParams)(search); + }); + return [2 /*return*/, this.apiCall.put(this.endpointPath(presetId), { + value: { searches: normalizedParams_1 }, + })]; + } + normalizedParams = (0, Utils_1.normalizeArrayableParams)(params.value); + return [2 /*return*/, this.apiCall.put(this.endpointPath(presetId), { + value: normalizedParams, + })]; + }); + }); + }; + Presets.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Presets.prototype.endpointPath = function (operation) { + return "".concat(Presets.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); + }; + Object.defineProperty(Presets, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return Presets; +}()); +exports.default = Presets; +//# sourceMappingURL=Presets.js.map \ No newline at end of file diff --git a/lib/Typesense/Presets.js.map b/lib/Typesense/Presets.js.map new file mode 100644 index 00000000..3d57b2a6 --- /dev/null +++ b/lib/Typesense/Presets.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Presets.js","sourceRoot":"","sources":["../../src/Typesense/Presets.ts"],"names":[],"mappings":";;;AAIA,iCAAmD;AAEnD,IAAM,YAAY,GAAG,UAAU,CAAC;AAUhC;IACE,iBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,wBAAM,GAAZ,UACE,QAAgB,EAChB,MAA0B;;;;gBAE1B,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC7D,qBAAmB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,MAAM;wBACxD,OAAA,IAAA,gCAAwB,EAAC,MAAM,CAAC;oBAAhC,CAAgC,CACjC,CAAC;oBAEF,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAe,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;4BACjE,KAAK,EAAE,EAAE,QAAQ,EAAE,kBAAgB,EAAE;yBACtC,CAAC,EAAC;gBACL,CAAC;gBACK,gBAAgB,GAAG,IAAA,gCAAwB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEhE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAe,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;wBACjE,KAAK,EAAE,gBAAgB;qBACxB,CAAC,EAAC;;;KACJ;IAEK,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACrE;IAEO,8BAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,OAAO,CAAC,YAAY,SAC5B,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,uBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,cAAC;AAAD,CAAC,AApCD,IAoCC"} \ No newline at end of file diff --git a/lib/Typesense/RequestWithCache.d.ts b/lib/Typesense/RequestWithCache.d.ts new file mode 100644 index 00000000..c03b6473 --- /dev/null +++ b/lib/Typesense/RequestWithCache.d.ts @@ -0,0 +1,11 @@ +export default class RequestWithCache { + private responseCache; + private responsePromiseCache; + clearCache(): void; + perform(requestContext: any, requestFunction: (...params: any) => unknown, requestFunctionArguments: any[], cacheOptions: CacheOptions): Promise; +} +interface CacheOptions { + cacheResponseForSeconds?: number; + maxSize?: number; +} +export {}; diff --git a/lib/Typesense/RequestWithCache.js b/lib/Typesense/RequestWithCache.js new file mode 100644 index 00000000..201b67a1 --- /dev/null +++ b/lib/Typesense/RequestWithCache.js @@ -0,0 +1,88 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var defaultCacheResponseForSeconds = 2 * 60; +var defaultMaxSize = 100; +var RequestWithCache = /** @class */ (function () { + function RequestWithCache() { + this.responseCache = new Map(); + this.responsePromiseCache = new Map(); + } + RequestWithCache.prototype.clearCache = function () { + this.responseCache = new Map(); + this.responsePromiseCache = new Map(); + }; + // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way + RequestWithCache.prototype.perform = function (requestContext, requestFunction, requestFunctionArguments, cacheOptions) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var _a, cacheResponseForSeconds, _b, maxSize, isCacheDisabled, requestFunctionArgumentsJSON, cacheEntry, now, isEntryValid, cachePromiseEntry, isEntryValid, responsePromise, response, isCacheOverMaxSize, oldestEntry, isResponsePromiseCacheOverMaxSize, oldestEntry; + return tslib_1.__generator(this, function (_c) { + switch (_c.label) { + case 0: + _a = cacheOptions.cacheResponseForSeconds, cacheResponseForSeconds = _a === void 0 ? defaultCacheResponseForSeconds : _a, _b = cacheOptions.maxSize, maxSize = _b === void 0 ? defaultMaxSize : _b; + isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0; + if (isCacheDisabled) { + return [2 /*return*/, requestFunction.call.apply(requestFunction, tslib_1.__spreadArray([requestContext], requestFunctionArguments, false))]; + } + requestFunctionArgumentsJSON = JSON.stringify(requestFunctionArguments); + cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON); + now = Date.now(); + if (cacheEntry) { + isEntryValid = now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000; + if (isEntryValid) { + this.responseCache.delete(requestFunctionArgumentsJSON); + this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry); + return [2 /*return*/, Promise.resolve(cacheEntry.response)]; + } + else { + this.responseCache.delete(requestFunctionArgumentsJSON); + } + } + cachePromiseEntry = this.responsePromiseCache.get(requestFunctionArgumentsJSON); + if (cachePromiseEntry) { + isEntryValid = now - cachePromiseEntry.requestTimestamp < + cacheResponseForSeconds * 1000; + if (isEntryValid) { + this.responsePromiseCache.delete(requestFunctionArgumentsJSON); + this.responsePromiseCache.set(requestFunctionArgumentsJSON, cachePromiseEntry); + return [2 /*return*/, cachePromiseEntry.responsePromise]; + } + else { + this.responsePromiseCache.delete(requestFunctionArgumentsJSON); + } + } + responsePromise = requestFunction.call.apply(requestFunction, tslib_1.__spreadArray([requestContext], requestFunctionArguments, false)); + this.responsePromiseCache.set(requestFunctionArgumentsJSON, { + requestTimestamp: now, + responsePromise: responsePromise, + }); + return [4 /*yield*/, responsePromise]; + case 1: + response = _c.sent(); + this.responseCache.set(requestFunctionArgumentsJSON, { + requestTimestamp: now, + response: response, + }); + isCacheOverMaxSize = this.responseCache.size > maxSize; + if (isCacheOverMaxSize) { + oldestEntry = this.responseCache.keys().next().value; + if (oldestEntry) { + this.responseCache.delete(oldestEntry); + } + } + isResponsePromiseCacheOverMaxSize = this.responsePromiseCache.size > maxSize; + if (isResponsePromiseCacheOverMaxSize) { + oldestEntry = this.responsePromiseCache.keys().next().value; + if (oldestEntry) { + this.responsePromiseCache.delete(oldestEntry); + } + } + return [2 /*return*/, response]; + } + }); + }); + }; + return RequestWithCache; +}()); +exports.default = RequestWithCache; +//# sourceMappingURL=RequestWithCache.js.map \ No newline at end of file diff --git a/lib/Typesense/RequestWithCache.js.map b/lib/Typesense/RequestWithCache.js.map new file mode 100644 index 00000000..ef7266ff --- /dev/null +++ b/lib/Typesense/RequestWithCache.js.map @@ -0,0 +1 @@ +{"version":3,"file":"RequestWithCache.js","sourceRoot":"","sources":["../../src/Typesense/RequestWithCache.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/SearchClient.d.ts b/lib/Typesense/SearchClient.d.ts new file mode 100644 index 00000000..cee519ea --- /dev/null +++ b/lib/Typesense/SearchClient.d.ts @@ -0,0 +1,13 @@ +import { ConfigurationOptions } from "./Configuration"; +import MultiSearch from "./MultiSearch"; +import { DocumentSchema } from "./Documents"; +import { SearchOnlyCollection } from "./SearchOnlyCollection"; +export default class SearchClient { + readonly multiSearch: MultiSearch; + private readonly configuration; + private readonly apiCall; + private readonly individualCollections; + constructor(options: ConfigurationOptions); + clearCache(): void; + collections(collectionName: string): SearchOnlyCollection | SearchOnlyCollection; +} diff --git a/lib/Typesense/SearchClient.js b/lib/Typesense/SearchClient.js new file mode 100644 index 00000000..d8de0e03 --- /dev/null +++ b/lib/Typesense/SearchClient.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Configuration_1 = tslib_1.__importDefault(require("./Configuration")); +var ApiCall_1 = tslib_1.__importDefault(require("./ApiCall")); +var MultiSearch_1 = tslib_1.__importDefault(require("./MultiSearch")); +var SearchOnlyCollection_1 = require("./SearchOnlyCollection"); +var SearchClient = /** @class */ (function () { + function SearchClient(options) { + var _a; + options.sendApiKeyAsQueryParam = (_a = options.sendApiKeyAsQueryParam) !== null && _a !== void 0 ? _a : true; + if (options.sendApiKeyAsQueryParam === true && + (options.apiKey || "").length > 2000) { + console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."); + options.sendApiKeyAsQueryParam = false; + } + this.configuration = new Configuration_1.default(options); + this.apiCall = new ApiCall_1.default(this.configuration); + this.multiSearch = new MultiSearch_1.default(this.apiCall, this.configuration, true); + this.individualCollections = {}; + } + SearchClient.prototype.clearCache = function () { + this.multiSearch.clearCache(); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + Object.entries(this.individualCollections).forEach(function (_a) { + var _ = _a[0], collection = _a[1]; + collection.documents().clearCache(); + }); + }; + SearchClient.prototype.collections = function (collectionName) { + if (!collectionName) { + throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to " + + "be searched must be specified. Use Typesense.Client if you need to access the collection object."); + } + else { + if (this.individualCollections[collectionName] === undefined) { + this.individualCollections[collectionName] = new SearchOnlyCollection_1.SearchOnlyCollection(collectionName, this.apiCall, this.configuration); + } + return this.individualCollections[collectionName]; + } + }; + return SearchClient; +}()); +exports.default = SearchClient; +//# sourceMappingURL=SearchClient.js.map \ No newline at end of file diff --git a/lib/Typesense/SearchClient.js.map b/lib/Typesense/SearchClient.js.map new file mode 100644 index 00000000..1aa2a26e --- /dev/null +++ b/lib/Typesense/SearchClient.js.map @@ -0,0 +1 @@ +{"version":3,"file":"SearchClient.js","sourceRoot":"","sources":["../../src/Typesense/SearchClient.ts"],"names":[],"mappings":";;;AAAA,0EAAsE;AACtE,8DAAgC;AAChC,sEAAwC;AAExC,+DAA8D;AAE9D;IAME,sBAAY,OAA6B;;QACvC,OAAO,CAAC,sBAAsB,GAAG,MAAA,OAAO,CAAC,sBAAsB,mCAAI,IAAI,CAAC;QACxE,IACE,OAAO,CAAC,sBAAsB,KAAK,IAAI;YACvC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI,EACpC,CAAC;YACD,OAAO,CAAC,IAAI,CACV,mIAAmI,CACpI,CAAC;YACF,OAAO,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,uBAAa,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,iCAAU,GAAV;QACE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAE9B,6DAA6D;QAC7D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,UAAC,EAAe;gBAAd,CAAC,QAAA,EAAE,UAAU,QAAA;YAChE,UAAU,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kCAAW,GAAX,UACE,cAAsB;QAEtB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,8FAA8F;gBAC5F,kGAAkG,CACrG,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7D,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,GAAG,IAAI,2CAAoB,CACnE,cAAc,EACd,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,CACnB,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACH,mBAAC;AAAD,CAAC,AApDD,IAoDC"} \ No newline at end of file diff --git a/lib/Typesense/SearchOnlyCollection.d.ts b/lib/Typesense/SearchOnlyCollection.d.ts new file mode 100644 index 00000000..c74fb562 --- /dev/null +++ b/lib/Typesense/SearchOnlyCollection.d.ts @@ -0,0 +1,10 @@ +import { DocumentSchema, SearchableDocuments } from "./Documents"; +import ApiCall from "./ApiCall"; +export declare class SearchOnlyCollection { + private readonly name; + private readonly apiCall; + private readonly configuration; + private readonly _documents; + constructor(name: string, apiCall: ApiCall, configuration: any); + documents(): SearchableDocuments; +} diff --git a/lib/Typesense/SearchOnlyCollection.js b/lib/Typesense/SearchOnlyCollection.js new file mode 100644 index 00000000..3c41aca0 --- /dev/null +++ b/lib/Typesense/SearchOnlyCollection.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SearchOnlyCollection = void 0; +var SearchOnlyDocuments_1 = require("./SearchOnlyDocuments"); +var SearchOnlyCollection = /** @class */ (function () { + function SearchOnlyCollection(name, apiCall, configuration) { + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this._documents = new SearchOnlyDocuments_1.SearchOnlyDocuments(this.name, this.apiCall, this.configuration); + } + SearchOnlyCollection.prototype.documents = function () { + return this._documents; + }; + return SearchOnlyCollection; +}()); +exports.SearchOnlyCollection = SearchOnlyCollection; +//# sourceMappingURL=SearchOnlyCollection.js.map \ No newline at end of file diff --git a/lib/Typesense/SearchOnlyCollection.js.map b/lib/Typesense/SearchOnlyCollection.js.map new file mode 100644 index 00000000..c52e0a87 --- /dev/null +++ b/lib/Typesense/SearchOnlyCollection.js.map @@ -0,0 +1 @@ +{"version":3,"file":"SearchOnlyCollection.js","sourceRoot":"","sources":["../../src/Typesense/SearchOnlyCollection.ts"],"names":[],"mappings":";;;AAEA,6DAA4D;AAE5D;IAGE,8BACmB,IAAY,EACZ,OAAgB,EAChB,aAAkB;QAFlB,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAAK;QAEnC,IAAI,CAAC,UAAU,GAAG,IAAI,yCAAmB,CACvC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,CACnB,CAAC;IACJ,CAAC;IAED,wCAAS,GAAT;QACE,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACH,2BAAC;AAAD,CAAC,AAlBD,IAkBC;AAlBY,oDAAoB"} \ No newline at end of file diff --git a/lib/Typesense/SearchOnlyDocuments.d.ts b/lib/Typesense/SearchOnlyDocuments.d.ts new file mode 100644 index 00000000..93453b0a --- /dev/null +++ b/lib/Typesense/SearchOnlyDocuments.d.ts @@ -0,0 +1,15 @@ +import RequestWithCache from "./RequestWithCache"; +import ApiCall from "./ApiCall"; +import Configuration from "./Configuration"; +import type { DocumentSchema, SearchableDocuments, SearchOptions, SearchParams, SearchParamsWithPreset, SearchResponse } from "./Documents"; +export declare class SearchOnlyDocuments implements SearchableDocuments { + protected collectionName: string; + protected apiCall: ApiCall; + protected configuration: Configuration; + protected requestWithCache: RequestWithCache; + constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration); + clearCache(): void; + search(searchParameters: SearchParams | SearchParamsWithPreset, { cacheSearchResultsForSeconds, abortSignal, }?: SearchOptions): Promise>; + protected endpointPath(operation?: string): string; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/SearchOnlyDocuments.js b/lib/Typesense/SearchOnlyDocuments.js new file mode 100644 index 00000000..11aa915e --- /dev/null +++ b/lib/Typesense/SearchOnlyDocuments.js @@ -0,0 +1,50 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SearchOnlyDocuments = void 0; +var tslib_1 = require("tslib"); +var RequestWithCache_1 = tslib_1.__importDefault(require("./RequestWithCache")); +var Collections_1 = tslib_1.__importDefault(require("./Collections")); +var Utils_1 = require("./Utils"); +var RESOURCEPATH = "/documents"; +var SearchOnlyDocuments = /** @class */ (function () { + function SearchOnlyDocuments(collectionName, apiCall, configuration) { + this.collectionName = collectionName; + this.apiCall = apiCall; + this.configuration = configuration; + this.requestWithCache = new RequestWithCache_1.default(); + } + SearchOnlyDocuments.prototype.clearCache = function () { + this.requestWithCache.clearCache(); + }; + SearchOnlyDocuments.prototype.search = function (searchParameters_1) { + return tslib_1.__awaiter(this, arguments, void 0, function (searchParameters, _a) { + var additionalQueryParams, normalizedParams, queryParams; + var _b = _a === void 0 ? {} : _a, _c = _b.cacheSearchResultsForSeconds, cacheSearchResultsForSeconds = _c === void 0 ? this.configuration + .cacheSearchResultsForSeconds : _c, _d = _b.abortSignal, abortSignal = _d === void 0 ? null : _d; + return tslib_1.__generator(this, function (_e) { + additionalQueryParams = {}; + if (this.configuration.useServerSideSearchCache === true) { + additionalQueryParams["use_cache"] = true; + } + normalizedParams = (0, Utils_1.normalizeArrayableParams)(searchParameters); + queryParams = Object.assign({}, additionalQueryParams, normalizedParams); + return [2 /*return*/, this.requestWithCache.perform(this.apiCall, this.apiCall.get, [this.endpointPath("search"), queryParams, { abortSignal: abortSignal }], { + cacheResponseForSeconds: cacheSearchResultsForSeconds, + })]; + }); + }); + }; + SearchOnlyDocuments.prototype.endpointPath = function (operation) { + return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(this.collectionName).concat(RESOURCEPATH).concat(operation === undefined ? "" : "/" + operation); + }; + Object.defineProperty(SearchOnlyDocuments, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return SearchOnlyDocuments; +}()); +exports.SearchOnlyDocuments = SearchOnlyDocuments; +//# sourceMappingURL=SearchOnlyDocuments.js.map \ No newline at end of file diff --git a/lib/Typesense/SearchOnlyDocuments.js.map b/lib/Typesense/SearchOnlyDocuments.js.map new file mode 100644 index 00000000..7a91533a --- /dev/null +++ b/lib/Typesense/SearchOnlyDocuments.js.map @@ -0,0 +1 @@ +{"version":3,"file":"SearchOnlyDocuments.js","sourceRoot":"","sources":["../../src/Typesense/SearchOnlyDocuments.ts"],"names":[],"mappings":";;;;AAAA,gFAAkD;AAGlD,sEAAwC;AASxC,iCAAmD;AAEnD,IAAM,YAAY,GAAG,YAAY,CAAC;AAElC;IAKE,6BACY,cAAsB,EACtB,OAAgB,EAChB,aAA4B;QAF5B,mBAAc,GAAd,cAAc,CAAQ;QACtB,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAAe;QAL9B,qBAAgB,GAAqB,IAAI,0BAAgB,EAAE,CAAC;IAMnE,CAAC;IAEJ,wCAAU,GAAV;QACE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAEK,oCAAM,GAAZ;oEACE,gBAAuD,EACvD,EAIqB;;gBAJrB,qBAImB,EAAE,KAAA,EAHnB,oCAC+B,EAD/B,4BAA4B,mBAAG,IAAI,CAAC,aAAa;iBAC9C,4BAA4B,KAAA,EAC/B,mBAAkB,EAAlB,WAAW,mBAAG,IAAI,KAAA;;gBAGd,qBAAqB,GAAG,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,aAAa,CAAC,wBAAwB,KAAK,IAAI,EAAE,CAAC;oBACzD,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;gBAC5C,CAAC;gBACK,gBAAgB,GAAG,IAAA,gCAAwB,EAAC,gBAAgB,CAAC,CAAC;gBAC9D,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,EAAE,EACF,qBAAqB,EACrB,gBAAgB,CACjB,CAAC;gBAEF,sBAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAChB,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,EAAE,WAAW,aAAA,EAAE,CAAC,EAC3D;wBACE,uBAAuB,EAAE,4BAA4B;qBACtD,CAC4B,EAAC;;;KACjC;IAES,0CAAY,GAAtB,UAAuB,SAAkB;QACvC,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,IAAI,CAAC,cAAc,SAAG,YAAY,SACtE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAC9C,CAAC;IACL,CAAC;IAED,sBAAW,mCAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,0BAAC;AAAD,CAAC,AArDD,IAqDC;AArDY,kDAAmB"} \ No newline at end of file diff --git a/lib/Typesense/Stats.d.ts b/lib/Typesense/Stats.d.ts new file mode 100644 index 00000000..a3a0ad2f --- /dev/null +++ b/lib/Typesense/Stats.d.ts @@ -0,0 +1,24 @@ +import ApiCall from "./ApiCall"; +export interface EndpointStats { + [endpoint: string]: number; +} +export interface StatsResponse { + delete_latency_ms?: number; + delete_requests_per_second?: number; + import_latency_ms?: number; + import_requests_per_second?: number; + latency_ms?: EndpointStats; + overloaded_requests_per_second?: number; + pending_write_batches?: number; + requests_per_second?: EndpointStats; + search_latency_ms?: number; + search_requests_per_second?: number; + total_requests_per_second?: number; + write_latency_ms?: number; + write_requests_per_second?: number; +} +export default class Metrics { + private apiCall; + constructor(apiCall: ApiCall); + retrieve(): Promise; +} diff --git a/lib/Typesense/Stats.js b/lib/Typesense/Stats.js new file mode 100644 index 00000000..f00c45d8 --- /dev/null +++ b/lib/Typesense/Stats.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RESOURCEPATH = "/stats.json"; +var Metrics = /** @class */ (function () { + function Metrics(apiCall) { + this.apiCall = apiCall; + } + Metrics.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; + }); + }); + }; + return Metrics; +}()); +exports.default = Metrics; +//# sourceMappingURL=Stats.js.map \ No newline at end of file diff --git a/lib/Typesense/Stats.js.map b/lib/Typesense/Stats.js.map new file mode 100644 index 00000000..d45c873b --- /dev/null +++ b/lib/Typesense/Stats.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Stats.js","sourceRoot":"","sources":["../../src/Typesense/Stats.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,aAAa,CAAC;AAsBnC;IACE,iBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC;;;KACvC;IACH,cAAC;AAAD,CAAC,AAND,IAMC"} \ No newline at end of file diff --git a/lib/Typesense/Stemming.d.ts b/lib/Typesense/Stemming.d.ts new file mode 100644 index 00000000..e0e102c5 --- /dev/null +++ b/lib/Typesense/Stemming.d.ts @@ -0,0 +1,12 @@ +import type ApiCall from "./ApiCall"; +import StemmingDictionaries from "./StemmingDictionaries"; +import StemmingDictionary from "./StemmingDictionary"; +export default class Stemming { + private readonly apiCall; + private readonly _stemmingDictionaries; + private readonly individualStemmingDictionaries; + constructor(apiCall: ApiCall); + dictionaries(): StemmingDictionaries; + dictionaries(id: string): StemmingDictionary; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/Stemming.js b/lib/Typesense/Stemming.js new file mode 100644 index 00000000..b02f7894 --- /dev/null +++ b/lib/Typesense/Stemming.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var StemmingDictionaries_1 = tslib_1.__importDefault(require("./StemmingDictionaries")); +var StemmingDictionary_1 = tslib_1.__importDefault(require("./StemmingDictionary")); +var RESOURCEPATH = "/stemming"; +var Stemming = /** @class */ (function () { + function Stemming(apiCall) { + this.apiCall = apiCall; + this.individualStemmingDictionaries = {}; + this.apiCall = apiCall; + this._stemmingDictionaries = new StemmingDictionaries_1.default(this.apiCall); + } + Stemming.prototype.dictionaries = function (id) { + if (id === undefined) { + return this._stemmingDictionaries; + } + else { + if (this.individualStemmingDictionaries[id] === undefined) { + this.individualStemmingDictionaries[id] = new StemmingDictionary_1.default(id, this.apiCall); + } + return this.individualStemmingDictionaries[id]; + } + }; + Object.defineProperty(Stemming, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return Stemming; +}()); +exports.default = Stemming; +//# sourceMappingURL=Stemming.js.map \ No newline at end of file diff --git a/lib/Typesense/Stemming.js.map b/lib/Typesense/Stemming.js.map new file mode 100644 index 00000000..ef37ddff --- /dev/null +++ b/lib/Typesense/Stemming.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Stemming.js","sourceRoot":"","sources":["../../src/Typesense/Stemming.ts"],"names":[],"mappings":";;;AACA,wFAA0D;AAC1D,oFAAsD;AAEtD,IAAM,YAAY,GAAG,WAAW,CAAC;AAEjC;IAOE,kBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAL5B,mCAA8B,GAG3C,EAAE,CAAC;QAGL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,qBAAqB,GAAG,IAAI,8BAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAID,+BAAY,GAAZ,UAAa,EAAW;QACtB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1D,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,GAAG,IAAI,4BAAkB,CAC9D,EAAE,EACF,IAAI,CAAC,OAAO,CACb,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,sBAAW,wBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,eAAC;AAAD,CAAC,AA/BD,IA+BC"} \ No newline at end of file diff --git a/lib/Typesense/StemmingDictionaries.d.ts b/lib/Typesense/StemmingDictionaries.d.ts new file mode 100644 index 00000000..82bf2cd7 --- /dev/null +++ b/lib/Typesense/StemmingDictionaries.d.ts @@ -0,0 +1,13 @@ +import ApiCall from "./ApiCall"; +import type { StemmingDictionaryCreateSchema } from "./StemmingDictionary"; +export interface StemmingDictionariesRetrieveSchema { + dictionaries: string[]; +} +export default class StemmingDictionaries { + private readonly apiCall; + constructor(apiCall: ApiCall); + upsert(id: string, wordRootCombinations: StemmingDictionaryCreateSchema[] | string): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/StemmingDictionaries.js b/lib/Typesense/StemmingDictionaries.js new file mode 100644 index 00000000..0add460b --- /dev/null +++ b/lib/Typesense/StemmingDictionaries.js @@ -0,0 +1,58 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RESOURCEPATH = "/stemming/dictionaries"; +var StemmingDictionaries = /** @class */ (function () { + function StemmingDictionaries(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + StemmingDictionaries.prototype.upsert = function (id, wordRootCombinations) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var wordRootCombinationsInJSONLFormat, resultsInJSONLFormat; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + wordRootCombinationsInJSONLFormat = Array.isArray(wordRootCombinations) + ? wordRootCombinations.map(function (combo) { return JSON.stringify(combo); }).join("\n") + : wordRootCombinations; + return [4 /*yield*/, this.apiCall.performRequest("post", this.endpointPath("import"), { + queryParameters: { id: id }, + bodyParameters: wordRootCombinationsInJSONLFormat, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, + })]; + case 1: + resultsInJSONLFormat = _a.sent(); + return [2 /*return*/, Array.isArray(wordRootCombinations) + ? resultsInJSONLFormat + .split("\n") + .map(function (line) { return JSON.parse(line); }) + : resultsInJSONLFormat]; + } + }); + }); + }; + StemmingDictionaries.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + StemmingDictionaries.prototype.endpointPath = function (operation) { + return operation === undefined + ? "".concat(StemmingDictionaries.RESOURCEPATH) + : "".concat(StemmingDictionaries.RESOURCEPATH, "/").concat(encodeURIComponent(operation)); + }; + Object.defineProperty(StemmingDictionaries, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return StemmingDictionaries; +}()); +exports.default = StemmingDictionaries; +//# sourceMappingURL=StemmingDictionaries.js.map \ No newline at end of file diff --git a/lib/Typesense/StemmingDictionaries.js.map b/lib/Typesense/StemmingDictionaries.js.map new file mode 100644 index 00000000..f38ae9ae --- /dev/null +++ b/lib/Typesense/StemmingDictionaries.js.map @@ -0,0 +1 @@ +{"version":3,"file":"StemmingDictionaries.js","sourceRoot":"","sources":["../../src/Typesense/StemmingDictionaries.ts"],"names":[],"mappings":";;;AAGA,IAAM,YAAY,GAAG,wBAAwB,CAAC;AAM9C;IACE,8BAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,qCAAM,GAAZ,UACE,EAAU,EACV,oBAA+D;;;;;;wBAEzD,iCAAiC,GAAG,KAAK,CAAC,OAAO,CACrD,oBAAoB,CACrB;4BACC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAArB,CAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;4BACvE,CAAC,CAAC,oBAAoB,CAAC;wBAEI,qBAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAE5D,MAAM,EACN,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC3B;gCACE,eAAe,EAAE,EAAC,EAAE,IAAA,EAAC;gCACrB,cAAc,EAAE,iCAAiC;gCACjD,iBAAiB,EAAE,EAAC,cAAc,EAAE,YAAY,EAAC;gCACjD,qBAAqB,EAAE,IAAI;6BAC5B,CACF,EAAA;;wBAVK,oBAAoB,GAAG,SAU5B;wBAED,sBAAO,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC;gCACxC,CAAC,CAAC,oBAAoB;qCACjB,KAAK,CAAC,IAAI,CAAC;qCACX,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmC,EAAlD,CAAkD,CAAC;gCACtE,CAAC,CAAC,oBAAoB,EAAC;;;;KAC1B;IAEK,uCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,CACpB,EAAC;;;KACH;IAEO,2CAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,SAAS,KAAK,SAAS;YAC5B,CAAC,CAAC,UAAG,oBAAoB,CAAC,YAAY,CAAE;YACxC,CAAC,CAAC,UAAG,oBAAoB,CAAC,YAAY,cAAI,kBAAkB,CAAC,SAAS,CAAC,CAAE,CAAC;IAC9E,CAAC;IAED,sBAAW,oCAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,2BAAC;AAAD,CAAC,AAjDD,IAiDC"} \ No newline at end of file diff --git a/lib/Typesense/StemmingDictionary.d.ts b/lib/Typesense/StemmingDictionary.d.ts new file mode 100644 index 00000000..9c2d4440 --- /dev/null +++ b/lib/Typesense/StemmingDictionary.d.ts @@ -0,0 +1,16 @@ +import ApiCall from "./ApiCall"; +export interface StemmingDictionaryCreateSchema { + root: string; + word: string; +} +export interface StemmingDictionarySchema { + id: string; + words: StemmingDictionaryCreateSchema[]; +} +export default class StemmingDictionary { + private id; + private apiCall; + constructor(id: string, apiCall: ApiCall); + retrieve(): Promise; + private endpointPath; +} diff --git a/lib/Typesense/StemmingDictionary.js b/lib/Typesense/StemmingDictionary.js new file mode 100644 index 00000000..035a908c --- /dev/null +++ b/lib/Typesense/StemmingDictionary.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var StemmingDictionaries_1 = tslib_1.__importDefault(require("./StemmingDictionaries")); +var StemmingDictionary = /** @class */ (function () { + function StemmingDictionary(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + StemmingDictionary.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + StemmingDictionary.prototype.endpointPath = function () { + return "".concat(StemmingDictionaries_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); + }; + return StemmingDictionary; +}()); +exports.default = StemmingDictionary; +//# sourceMappingURL=StemmingDictionary.js.map \ No newline at end of file diff --git a/lib/Typesense/StemmingDictionary.js.map b/lib/Typesense/StemmingDictionary.js.map new file mode 100644 index 00000000..72aa2586 --- /dev/null +++ b/lib/Typesense/StemmingDictionary.js.map @@ -0,0 +1 @@ +{"version":3,"file":"StemmingDictionary.js","sourceRoot":"","sources":["../../src/Typesense/StemmingDictionary.ts"],"names":[],"mappings":";;;AACA,wFAA0D;AAY1D;IACE,4BACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,qCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA2B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACxE;IAEO,yCAAY,GAApB;QACE,OAAO,UAAG,8BAAoB,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;IAC/E,CAAC;IACH,yBAAC;AAAD,CAAC,AAbD,IAaC"} \ No newline at end of file diff --git a/lib/Typesense/Stopword.d.ts b/lib/Typesense/Stopword.d.ts new file mode 100644 index 00000000..3a74c588 --- /dev/null +++ b/lib/Typesense/Stopword.d.ts @@ -0,0 +1,18 @@ +import ApiCall from "./ApiCall"; +import { StopwordCreateSchema } from "./Stopwords"; +export interface StopwordSchema extends StopwordCreateSchema { + id: string; + stopwords: string[]; + locale?: string; +} +export interface StopwordDeleteSchema { + id: string; +} +export default class Stopword { + private stopwordId; + private apiCall; + constructor(stopwordId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} diff --git a/lib/Typesense/Stopword.js b/lib/Typesense/Stopword.js new file mode 100644 index 00000000..83547225 --- /dev/null +++ b/lib/Typesense/Stopword.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Stopwords_1 = tslib_1.__importDefault(require("./Stopwords")); +var Stopword = /** @class */ (function () { + function Stopword(stopwordId, apiCall) { + this.stopwordId = stopwordId; + this.apiCall = apiCall; + } + Stopword.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Stopword.prototype.delete = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; + }); + }); + }; + Stopword.prototype.endpointPath = function () { + return "".concat(Stopwords_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.stopwordId)); + }; + return Stopword; +}()); +exports.default = Stopword; +//# sourceMappingURL=Stopword.js.map \ No newline at end of file diff --git a/lib/Typesense/Stopword.js.map b/lib/Typesense/Stopword.js.map new file mode 100644 index 00000000..9523cdce --- /dev/null +++ b/lib/Typesense/Stopword.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Stopword.js","sourceRoot":"","sources":["../../src/Typesense/Stopword.ts"],"names":[],"mappings":";;;AACA,kEAA8D;AAY9D;IACE,kBACU,UAAkB,EAClB,OAAgB;QADhB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,2BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAiB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC9D;IAEK,yBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEO,+BAAY,GAApB;QACE,OAAO,UAAG,mBAAS,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAE,CAAC;IAC5E,CAAC;IACH,eAAC;AAAD,CAAC,AAjBD,IAiBC"} \ No newline at end of file diff --git a/lib/Typesense/Stopwords.d.ts b/lib/Typesense/Stopwords.d.ts new file mode 100644 index 00000000..3d119c1f --- /dev/null +++ b/lib/Typesense/Stopwords.d.ts @@ -0,0 +1,17 @@ +import ApiCall from "./ApiCall"; +import { StopwordSchema } from "./Stopword"; +export interface StopwordCreateSchema { + stopwords: string[]; + locale?: string; +} +export interface StopwordsRetrieveSchema { + stopwords: StopwordSchema[]; +} +export default class Stopwords { + private apiCall; + constructor(apiCall: ApiCall); + upsert(stopwordId: string, params: StopwordCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/Stopwords.js b/lib/Typesense/Stopwords.js new file mode 100644 index 00000000..6caff949 --- /dev/null +++ b/lib/Typesense/Stopwords.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var RESOURCEPATH = "/stopwords"; +var Stopwords = /** @class */ (function () { + function Stopwords(apiCall) { + this.apiCall = apiCall; + } + Stopwords.prototype.upsert = function (stopwordId, params) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.put(this.endpointPath(stopwordId), params)]; + }); + }); + }; + Stopwords.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Stopwords.prototype.endpointPath = function (operation) { + return "".concat(Stopwords.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); + }; + Object.defineProperty(Stopwords, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return Stopwords; +}()); +exports.default = Stopwords; +//# sourceMappingURL=Stopwords.js.map \ No newline at end of file diff --git a/lib/Typesense/Stopwords.js.map b/lib/Typesense/Stopwords.js.map new file mode 100644 index 00000000..f02de760 --- /dev/null +++ b/lib/Typesense/Stopwords.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Stopwords.js","sourceRoot":"","sources":["../../src/Typesense/Stopwords.ts"],"names":[],"mappings":";;;AAGA,IAAM,YAAY,GAAG,YAAY,CAAC;AAWlC;IACE,mBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,0BAAM,GAAZ,UACE,UAAkB,EAClB,MAA4B;;;gBAE5B,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAC7B,MAAM,CACP,EAAC;;;KACH;IAEK,4BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEO,gCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,SAAS,CAAC,YAAY,SAC9B,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,yBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,gBAAC;AAAD,CAAC,AA1BD,IA0BC"} \ No newline at end of file diff --git a/lib/Typesense/Synonym.d.ts b/lib/Typesense/Synonym.d.ts new file mode 100644 index 00000000..e178a28b --- /dev/null +++ b/lib/Typesense/Synonym.d.ts @@ -0,0 +1,17 @@ +import ApiCall from "./ApiCall"; +import { SynonymCreateSchema } from "./Synonyms"; +export interface SynonymSchema extends SynonymCreateSchema { + id: string; +} +export interface SynonymDeleteSchema { + id: string; +} +export default class Synonym { + private collectionName; + private synonymId; + private apiCall; + constructor(collectionName: string, synonymId: string, apiCall: ApiCall); + retrieve(): Promise; + delete(): Promise; + private endpointPath; +} diff --git a/lib/Typesense/Synonym.js b/lib/Typesense/Synonym.js new file mode 100644 index 00000000..fb4830a7 --- /dev/null +++ b/lib/Typesense/Synonym.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Collections_1 = tslib_1.__importDefault(require("./Collections")); +var Synonyms_1 = tslib_1.__importDefault(require("./Synonyms")); +var Synonym = /** @class */ (function () { + function Synonym(collectionName, synonymId, apiCall) { + this.collectionName = collectionName; + this.synonymId = synonymId; + this.apiCall = apiCall; + } + Synonym.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Synonym.prototype.delete = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; + }); + }); + }; + Synonym.prototype.endpointPath = function () { + return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Synonyms_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.synonymId)); + }; + return Synonym; +}()); +exports.default = Synonym; +//# sourceMappingURL=Synonym.js.map \ No newline at end of file diff --git a/lib/Typesense/Synonym.js.map b/lib/Typesense/Synonym.js.map new file mode 100644 index 00000000..1278adf2 --- /dev/null +++ b/lib/Typesense/Synonym.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Synonym.js","sourceRoot":"","sources":["../../src/Typesense/Synonym.ts"],"names":[],"mappings":";;;AACA,sEAAwC;AACxC,gEAA2D;AAU3D;IACE,iBACU,cAAsB,EACtB,SAAiB,EACjB,OAAgB;QAFhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,cAAS,GAAT,SAAS,CAAQ;QACjB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAgB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC7D;IAEK,wBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAsB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACtE;IAEO,8BAAY,GAApB;QACE,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAG,kBAAQ,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAE,CAAC;IAChJ,CAAC;IACH,cAAC;AAAD,CAAC,AAlBD,IAkBC"} \ No newline at end of file diff --git a/lib/Typesense/Synonyms.d.ts b/lib/Typesense/Synonyms.d.ts new file mode 100644 index 00000000..82bfb1d6 --- /dev/null +++ b/lib/Typesense/Synonyms.d.ts @@ -0,0 +1,20 @@ +import ApiCall from "./ApiCall"; +import { SynonymSchema } from "./Synonym"; +export interface SynonymCreateSchema { + synonyms: string[]; + root?: string; + locale?: string; + symbols_to_index?: string[]; +} +export interface SynonymsRetrieveSchema { + synonyms: SynonymSchema[]; +} +export default class Synonyms { + private collectionName; + private apiCall; + constructor(collectionName: string, apiCall: ApiCall); + upsert(synonymId: string, params: SynonymCreateSchema): Promise; + retrieve(): Promise; + private endpointPath; + static get RESOURCEPATH(): string; +} diff --git a/lib/Typesense/Synonyms.js b/lib/Typesense/Synonyms.js new file mode 100644 index 00000000..cef6cb72 --- /dev/null +++ b/lib/Typesense/Synonyms.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var Collections_1 = tslib_1.__importDefault(require("./Collections")); +var RESOURCEPATH = "/synonyms"; +var Synonyms = /** @class */ (function () { + function Synonyms(collectionName, apiCall) { + this.collectionName = collectionName; + this.apiCall = apiCall; + } + Synonyms.prototype.upsert = function (synonymId, params) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.put(this.endpointPath(synonymId), params)]; + }); + }); + }; + Synonyms.prototype.retrieve = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.apiCall.get(this.endpointPath())]; + }); + }); + }; + Synonyms.prototype.endpointPath = function (operation) { + return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Synonyms.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); + }; + Object.defineProperty(Synonyms, "RESOURCEPATH", { + get: function () { + return RESOURCEPATH; + }, + enumerable: false, + configurable: true + }); + return Synonyms; +}()); +exports.default = Synonyms; +//# sourceMappingURL=Synonyms.js.map \ No newline at end of file diff --git a/lib/Typesense/Synonyms.js.map b/lib/Typesense/Synonyms.js.map new file mode 100644 index 00000000..08c256ac --- /dev/null +++ b/lib/Typesense/Synonyms.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Synonyms.js","sourceRoot":"","sources":["../../src/Typesense/Synonyms.ts"],"names":[],"mappings":";;;AACA,sEAAwC;AAGxC,IAAM,YAAY,GAAG,WAAW,CAAC;AAajC;IACE,kBAAoB,cAAsB,EAAU,OAAgB;QAAhD,mBAAc,GAAd,cAAc,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElE,yBAAM,GAAZ,UACE,SAAiB,EACjB,MAA2B;;;gBAE3B,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAC5B,MAAM,CACP,EAAC;;;KACH;IAEK,2BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAyB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACtE;IAEO,+BAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,SAC3E,QAAQ,CAAC,YAAY,SACpB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAE,CAAC;IAC1E,CAAC;IAED,sBAAW,wBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,eAAC;AAAD,CAAC,AA1BD,IA0BC"} \ No newline at end of file diff --git a/lib/Typesense/Utils.d.ts b/lib/Typesense/Utils.d.ts new file mode 100644 index 00000000..768c81c2 --- /dev/null +++ b/lib/Typesense/Utils.d.ts @@ -0,0 +1,6 @@ +import type { ExtractBaseTypes, SearchParams } from "./Documents"; +export declare function normalizeArrayableParams(params: T): Prettify>; +type Prettify = { + [K in keyof T]: T[K]; +} & {}; +export {}; diff --git a/lib/Typesense/Utils.js b/lib/Typesense/Utils.js new file mode 100644 index 00000000..d5e5a8b6 --- /dev/null +++ b/lib/Typesense/Utils.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.normalizeArrayableParams = normalizeArrayableParams; +var tslib_1 = require("tslib"); +var Documents_1 = require("./Documents"); +function hasNoArrayValues(params) { + return Object.keys(Documents_1.arrayableParams) + .filter(function (key) { return params[key] !== undefined; }) + .every(function (key) { return isNonArrayValue(params[key]); }); +} +function normalizeArrayableParams(params) { + var result = tslib_1.__assign({}, params); + var transformedValues = Object.keys(Documents_1.arrayableParams) + .filter(function (key) { return Array.isArray(result[key]); }) + .map(function (key) { + result[key] = result[key].join(","); + return key; + }); + if (!transformedValues.length && hasNoArrayValues(result)) { + return result; + } + if (!hasNoArrayValues(result)) { + throw new Error("Failed to normalize arrayable params: ".concat(JSON.stringify(result))); + } + return result; +} +function isNonArrayValue(value) { + return !Array.isArray(value); +} +//# sourceMappingURL=Utils.js.map \ No newline at end of file diff --git a/lib/Typesense/Utils.js.map b/lib/Typesense/Utils.js.map new file mode 100644 index 00000000..aba3aa09 --- /dev/null +++ b/lib/Typesense/Utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../src/Typesense/Utils.ts"],"names":[],"mappings":";;AAeA,4DAuBC;;AAtCD,yCAA8C;AAO9C,SAAS,gBAAgB,CACvB,MAA+B;IAE/B,OAAO,MAAM,CAAC,IAAI,CAAC,2BAAe,CAAC;SAChC,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAzB,CAAyB,CAAC;SAC1C,KAAK,CAAC,UAAC,GAAG,IAAK,OAAA,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAA5B,CAA4B,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,wBAAwB,CACtC,MAAS;IAET,IAAM,MAAM,wBAAQ,MAAM,CAAE,CAAC;IAE7B,IAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,2BAAe,CAAC;SACnD,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAA1B,CAA0B,CAAC;SAC3C,GAAG,CAAC,UAAC,GAAG;QACP,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEL,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,gDAAyC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAE,CAClE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACtB,KAAoC;IAEpC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"} \ No newline at end of file From a78adb9e59080b9ed4b9655bcf887b949928ab25 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Fri, 7 Feb 2025 13:43:54 +0200 Subject: [PATCH 31/45] build: refactor typescript configuration for dual module builds - split `tsconfig.json` into base, cjs and esm variants - update `build` script to use dedicated cjs config - simplify main tsconfig by extending from base config - configure tsup to use esm config for browser builds --- package.json | 2 +- tsconfig.base.json | 17 +++++++++++ tsconfig.cjs.json | 9 ++++++ tsconfig.esm.json | 9 ++++++ tsconfig.json | 73 +++------------------------------------------- tsup.config.ts | 2 +- 6 files changed, 41 insertions(+), 71 deletions(-) create mode 100644 tsconfig.base.json create mode 100644 tsconfig.cjs.json create mode 100644 tsconfig.esm.json diff --git a/package.json b/package.json index 814eafd6..ba209ff7 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "pretest": "eslint .", "prepare": "npm run build", "test": "nyc --reporter=html --reporter=text ts-mocha --require @babel/register --recursive", - "build": "tsc && tsup", + "build": "tsc -p ./tsconfig.cjs.json && tsup", "prebuild": "rimraf dist lib", "postbuild": "rimraf lib/browser*", "build:tsc:watch": "tsc --watch", diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 00000000..95708baa --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,17 @@ +{ + "include": ["./src/**/*.ts"], + "compilerOptions": { + "lib": ["es5", "es6", "es7", "esnext", "dom"], + "target": "es2018", + "rootDir": "./src", + "importHelpers": true, + "strict": true, + "noImplicitAny": false, + "moduleResolution": "node", + "esModuleInterop": true, + "inlineSourceMap": false, + "inlineSources": false, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json new file mode 100644 index 00000000..b0b058ff --- /dev/null +++ b/tsconfig.cjs.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "declaration": true, + "sourceMap": true, + "outDir": "./lib", + "module": "CommonJS" + } +} diff --git a/tsconfig.esm.json b/tsconfig.esm.json new file mode 100644 index 00000000..4b64e60c --- /dev/null +++ b/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "ES2015", + "declaration": false, + "declarationMap": false, + "sourceMap": false, + } +} diff --git a/tsconfig.json b/tsconfig.json index 89148727..a22650bd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,71 +1,6 @@ { - "include": ["./src/**/*.ts"], - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Basic Options */ - // "incremental": true, /* Enable incremental compilation */ - "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, - // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true /* Generates corresponding '.d.ts' file. */, - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - "sourceMap": true /* Generates corresponding '.map' file. */, - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./lib" /* Redirect output structure to the directory. */, - "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": false /* Raise error on expressions and declarations with an implied 'any' type. */, - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - - /* Module Resolution Options */ - "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - "inlineSourceMap": false /* Emit a single file with source maps instead of having a separate file. */, - "inlineSources": false /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */, - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - "skipLibCheck": true /* Skip type checking of declaration files. */, - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ - } + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./lib", + } } diff --git a/tsup.config.ts b/tsup.config.ts index 648c0932..71c00f14 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -22,6 +22,7 @@ const baseOptions: Options = { options.mainFields = ["browser", "module", "main"]; options.treeShaking = true; }, + tsconfig: "./tsconfig.esm.json", esbuildPlugins: [ nodeModulesPolyfillPlugin({ modules: { @@ -36,7 +37,6 @@ const baseOptions: Options = { export default defineConfig([ { ...baseOptions, - minify: true, sourcemap: true, dts: true, }, From ff485f9a6723440c85c3aaa5fce74b7dba833c34 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Fri, 7 Feb 2025 13:44:38 +0200 Subject: [PATCH 32/45] refactor: consolidate browser and main typesense exports - merge `browser.ts` exports into main `Typesense.ts` file - update tsup config to use single entry point - simplify export pattern for core modules - streamline type exports --- src/Typesense.ts | 9 +++++---- src/browser.ts | 33 --------------------------------- tsup.config.ts | 2 +- 3 files changed, 6 insertions(+), 38 deletions(-) delete mode 100644 src/browser.ts diff --git a/src/Typesense.ts b/src/Typesense.ts index f632b7fe..8f5cdd2a 100644 --- a/src/Typesense.ts +++ b/src/Typesense.ts @@ -1,9 +1,10 @@ -import Client from "./Typesense/Client"; import SearchClient from "./Typesense/SearchClient"; -import * as Errors from "./Typesense/Errors"; +import Client from "./Typesense/Client"; + +export { SearchClient }; +export { Client }; +export * as Errors from "./Typesense/Errors"; -export { Client, SearchClient, Errors }; -export default { Client, SearchClient, Errors }; export type * from "./Typesense/Aliases"; export type * from "./Typesense/AnalyticsEvent"; export type * from "./Typesense/AnalyticsRule"; diff --git a/src/browser.ts b/src/browser.ts deleted file mode 100644 index 8f5cdd2a..00000000 --- a/src/browser.ts +++ /dev/null @@ -1,33 +0,0 @@ -import SearchClient from "./Typesense/SearchClient"; -import Client from "./Typesense/Client"; - -export { SearchClient }; -export { Client }; -export * as Errors from "./Typesense/Errors"; - -export type * from "./Typesense/Aliases"; -export type * from "./Typesense/AnalyticsEvent"; -export type * from "./Typesense/AnalyticsRule"; -export type * from "./Typesense/AnalyticsRules"; -export type * from "./Typesense/Collection"; -export type * from "./Typesense/Collections"; -export type * from "./Typesense/Configuration"; -export type * from "./Typesense/Conversations"; -export type * from "./Typesense/Conversation"; -export type * from "./Typesense/ConversationModel"; -export type * from "./Typesense/Debug"; -export type * from "./Typesense/Documents"; -export type * from "./Typesense/Health"; -export type * from "./Typesense/Key"; -export type * from "./Typesense/Keys"; -export type * from "./Typesense/Metrics"; -export type * from "./Typesense/MultiSearch"; -export type * from "./Typesense/Override"; -export type * from "./Typesense/Overrides"; -export type * from "./Typesense/Preset"; -export type * from "./Typesense/Presets"; -export type * from "./Typesense/Stats"; -export type * from "./Typesense/Stopword"; -export type * from "./Typesense/Stopwords"; -export type * from "./Typesense/Synonym"; -export type * from "./Typesense/Synonyms"; diff --git a/tsup.config.ts b/tsup.config.ts index 71c00f14..546df4bc 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -6,7 +6,7 @@ import { nodeModulesPolyfillPlugin } from "esbuild-plugins-node-modules-polyfill const baseOptions: Options = { target: browserList(["defaults"]) as Options["target"], entry: { - typesense: "src/browser.ts", + typesense: "src/Typesense.ts", }, clean: true, format: ["cjs", "esm"], From 02eed40c5a04f934a896347afda1502821b1bada Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Fri, 7 Feb 2025 13:45:08 +0200 Subject: [PATCH 33/45] build: enable tree shaking for browser bundle - add explicit `treeshake` flag in tsup config - set browser-specific mainFields for module resolution - consolidate build optimization settings --- tsup.config.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tsup.config.ts b/tsup.config.ts index 546df4bc..3f21ff7e 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -18,10 +18,7 @@ const baseOptions: Options = { }, splitting: true, platform: "browser", - esbuildOptions(options) { - options.mainFields = ["browser", "module", "main"]; - options.treeShaking = true; - }, + treeshake: true, tsconfig: "./tsconfig.esm.json", esbuildPlugins: [ nodeModulesPolyfillPlugin({ From ce41977558a16e029033af53ad77ee5bade44764 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Fri, 7 Feb 2025 13:45:32 +0200 Subject: [PATCH 34/45] build: include source files in npm package - add `src` directory to published files in `package.json` - remove redundant browser file cleanup step - expand package export configuration in `package.json` to include unminified versions of the browser bundle --- package.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index ba209ff7..840c0bd8 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,11 @@ "require": "./dist/typesense.min.js" } }, + "files": [ + "./dist", + "./lib", + "./src" + ], "keywords": [ "typesense", "api", @@ -105,7 +110,6 @@ "test": "nyc --reporter=html --reporter=text ts-mocha --require @babel/register --recursive", "build": "tsc -p ./tsconfig.cjs.json && tsup", "prebuild": "rimraf dist lib", - "postbuild": "rimraf lib/browser*", "build:tsc:watch": "tsc --watch", "ci-lint": "eslint .", "ci-test": "nyc --reporter=text --reporter=html ts-mocha --require @babel/register --reporter mocha-junit-reporter --recursive --colors", From a5d6a4c72324304cc1833c4006d8a5c75f8ee18a Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Fri, 7 Feb 2025 13:46:00 +0200 Subject: [PATCH 35/45] chore: build artifacts --- dist/typesense.js | 124 +- dist/typesense.min.js | 1786 ++++++++++++++++- dist/typesense.min.js.map | 2 +- dist/typesense.min.mjs | 1777 +++++++++++++++- dist/typesense.min.mjs.map | 2 +- dist/typesense.mjs | 97 +- lib/Typesense.d.ts | 13 +- lib/Typesense.js | 14 +- lib/Typesense.js.map | 2 +- lib/Typesense/Alias.js | 37 +- lib/Typesense/Alias.js.map | 2 +- lib/Typesense/Aliases.js | 46 +- lib/Typesense/Aliases.js.map | 2 +- lib/Typesense/Analytics.js | 35 +- lib/Typesense/Analytics.js.map | 2 +- lib/Typesense/AnalyticsEvents.js | 36 +- lib/Typesense/AnalyticsEvents.js.map | 2 +- lib/Typesense/AnalyticsRule.js | 37 +- lib/Typesense/AnalyticsRule.js.map | 2 +- lib/Typesense/AnalyticsRules.js | 46 +- lib/Typesense/AnalyticsRules.js.map | 2 +- lib/Typesense/ApiCall.js | 527 +++-- lib/Typesense/ApiCall.js.map | 2 +- lib/Typesense/Client.js | 77 +- lib/Typesense/Client.js.map | 2 +- lib/Typesense/Collection.js | 106 +- lib/Typesense/Collection.js.map | 2 +- lib/Typesense/Collections.js | 42 +- lib/Typesense/Collections.js.map | 2 +- lib/Typesense/Configuration.js | 62 +- lib/Typesense/Configuration.js.map | 2 +- lib/Typesense/Conversation.js | 47 +- lib/Typesense/Conversation.js.map | 2 +- lib/Typesense/ConversationModel.js | 47 +- lib/Typesense/ConversationModel.js.map | 2 +- lib/Typesense/ConversationModels.js | 46 +- lib/Typesense/ConversationModels.js.map | 2 +- lib/Typesense/Conversations.js | 39 +- lib/Typesense/Conversations.js.map | 2 +- lib/Typesense/Debug.js | 20 +- lib/Typesense/Debug.js.map | 2 +- lib/Typesense/Document.js | 50 +- lib/Typesense/Document.js.map | 2 +- lib/Typesense/Documents.js | 287 ++- lib/Typesense/Documents.js.map | 2 +- lib/Typesense/Errors/HTTPError.js | 13 +- lib/Typesense/Errors/HTTPError.js.map | 2 +- lib/Typesense/Errors/ImportError.js | 19 +- lib/Typesense/Errors/ImportError.js.map | 2 +- .../Errors/MissingConfigurationError.js | 13 +- .../Errors/MissingConfigurationError.js.map | 2 +- lib/Typesense/Errors/ObjectAlreadyExists.js | 13 +- .../Errors/ObjectAlreadyExists.js.map | 2 +- lib/Typesense/Errors/ObjectNotFound.js | 13 +- lib/Typesense/Errors/ObjectNotFound.js.map | 2 +- lib/Typesense/Errors/ObjectUnprocessable.js | 13 +- .../Errors/ObjectUnprocessable.js.map | 2 +- lib/Typesense/Errors/RequestMalformed.js | 13 +- lib/Typesense/Errors/RequestMalformed.js.map | 2 +- lib/Typesense/Errors/RequestUnauthorized.js | 13 +- .../Errors/RequestUnauthorized.js.map | 2 +- lib/Typesense/Errors/ServerError.js | 13 +- lib/Typesense/Errors/ServerError.js.map | 2 +- lib/Typesense/Errors/TypesenseError.js | 21 +- lib/Typesense/Errors/TypesenseError.js.map | 2 +- lib/Typesense/Errors/index.js | 22 +- lib/Typesense/Errors/index.js.map | 2 +- lib/Typesense/Health.js | 20 +- lib/Typesense/Health.js.map | 2 +- lib/Typesense/Key.js | 37 +- lib/Typesense/Key.js.map | 2 +- lib/Typesense/Keys.js | 58 +- lib/Typesense/Keys.js.map | 2 +- lib/Typesense/Metrics.js | 20 +- lib/Typesense/Metrics.js.map | 2 +- lib/Typesense/MultiSearch.js | 71 +- lib/Typesense/MultiSearch.js.map | 2 +- lib/Typesense/Operations.js | 21 +- lib/Typesense/Operations.js.map | 2 +- lib/Typesense/Override.js | 39 +- lib/Typesense/Override.js.map | 2 +- lib/Typesense/Overrides.js | 49 +- lib/Typesense/Overrides.js.map | 2 +- lib/Typesense/Preset.js | 37 +- lib/Typesense/Preset.js.map | 2 +- lib/Typesense/Presets.js | 65 +- lib/Typesense/Presets.js.map | 2 +- lib/Typesense/RequestWithCache.js | 142 +- lib/Typesense/RequestWithCache.js.map | 2 +- lib/Typesense/SearchClient.js | 28 +- lib/Typesense/SearchClient.js.map | 2 +- lib/Typesense/SearchOnlyCollection.js | 13 +- lib/Typesense/SearchOnlyCollection.js.map | 2 +- lib/Typesense/SearchOnlyDocuments.js | 65 +- lib/Typesense/SearchOnlyDocuments.js.map | 2 +- lib/Typesense/Stats.js | 20 +- lib/Typesense/Stats.js.map | 2 +- lib/Typesense/Stemming.js | 29 +- lib/Typesense/Stemming.js.map | 2 +- lib/Typesense/StemmingDictionaries.js | 78 +- lib/Typesense/StemmingDictionaries.js.map | 2 +- lib/Typesense/StemmingDictionary.js | 27 +- lib/Typesense/StemmingDictionary.js.map | 2 +- lib/Typesense/Stopword.js | 37 +- lib/Typesense/Stopword.js.map | 2 +- lib/Typesense/Stopwords.js | 46 +- lib/Typesense/Stopwords.js.map | 2 +- lib/Typesense/Synonym.js | 39 +- lib/Typesense/Synonym.js.map | 2 +- lib/Typesense/Synonyms.js | 49 +- lib/Typesense/Synonyms.js.map | 2 +- lib/Typesense/Utils.js | 17 +- lib/Typesense/Utils.js.map | 2 +- 113 files changed, 4821 insertions(+), 1860 deletions(-) diff --git a/dist/typesense.js b/dist/typesense.js index 31978afb..7e23eeaa 100644 --- a/dist/typesense.js +++ b/dist/typesense.js @@ -1,4 +1,14 @@ -"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var __create = Object.create; +'use strict'; + +var logger = require('loglevel'); +var axios = require('axios'); + +function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } + +var logger__default = /*#__PURE__*/_interopDefault(logger); +var axios__default = /*#__PURE__*/_interopDefault(axios); + +var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; @@ -24,14 +34,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); // node-modules-polyfills-empty:http var require_http = __commonJS({ "node-modules-polyfills-empty:http"(exports, module) { - "use strict"; module.exports = {}; } }); @@ -39,7 +48,6 @@ var require_http = __commonJS({ // node-modules-polyfills-empty:https var require_https = __commonJS({ "node-modules-polyfills-empty:https"(exports, module) { - "use strict"; module.exports = {}; } }); @@ -47,14 +55,10 @@ var require_https = __commonJS({ // node-modules-polyfills-empty:crypto var require_crypto = __commonJS({ "node-modules-polyfills-empty:crypto"(exports, module) { - "use strict"; module.exports = {}; } }); -// src/Typesense/Configuration.ts -var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel); - // src/Typesense/Errors/index.ts var Errors_exports = {}; __export(Errors_exports, { @@ -139,14 +143,14 @@ var Configuration = class { this.nearestNode = this.setDefaultPortInNode(this.nearestNode); this.connectionTimeoutSeconds = options.connectionTimeoutSeconds || options.timeoutSeconds || 5; this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60; - this.numRetries = (options.numRetries !== void 0 && options.numRetries >= 0 ? options.numRetries : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; + this.numRetries = (options.numRetries !== undefined && options.numRetries >= 0 ? options.numRetries : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1; this.apiKey = options.apiKey; this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; this.cacheSearchResultsForSeconds = options.cacheSearchResultsForSeconds || 0; this.useServerSideSearchCache = options.useServerSideSearchCache || false; this.axiosAdapter = options.axiosAdapter; - this.logger = options.logger || _loglevel2.default; + this.logger = options.logger || logger__default.default; this.logLevel = options.logLevel || "warn"; this.logger.setLevel(this.logLevel); this.additionalHeaders = options.additionalHeaders; @@ -229,7 +233,6 @@ var Configuration = class { // src/Typesense/ApiCall.ts var import_http = __toESM(require_http()); var import_https = __toESM(require_https()); -var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios); var APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; var HEALTHY = true; var UNHEALTHY = false; @@ -252,7 +255,7 @@ var ApiCall = class { } async get(endpoint, queryParameters = {}, { abortSignal = null, - responseType = void 0 + responseType = undefined } = {}) { return this.performRequest("get", endpoint, { queryParameters, @@ -283,20 +286,20 @@ var ApiCall = class { }); } getAdapter() { - if (!this.configuration.axiosAdapter) return void 0; + if (!this.configuration.axiosAdapter) return undefined; if (typeof this.configuration.axiosAdapter === "function") return this.configuration.axiosAdapter; const isCloudflareWorkers = typeof navigator !== "undefined" && navigator.userAgent === "Cloudflare-Workers"; - return isCloudflareWorkers ? _axios2.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis) : _axios2.default.getAdapter(this.configuration.axiosAdapter); + return isCloudflareWorkers ? axios__default.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis) : axios__default.default.getAdapter(this.configuration.axiosAdapter); } async performRequest(requestType, endpoint, { queryParameters = null, bodyParameters = null, additionalHeaders = {}, abortSignal = null, - responseType = void 0, + responseType = undefined, skipConnectionTimeout = false, - enableKeepAlive = void 0 + enableKeepAlive = undefined }) { this.configuration.validate(); const requestNumber = Date.now(); @@ -391,7 +394,7 @@ var ApiCall = class { requestOptions.data = bodyParameters; } if (abortSignal) { - const cancelToken = _axios2.default.CancelToken; + const cancelToken = axios__default.default.CancelToken; const source = cancelToken.source(); abortListener = () => { wasAborted = true; @@ -400,7 +403,7 @@ var ApiCall = class { abortSignal.addEventListener("abort", abortListener); requestOptions.cancelToken = source.token; } - const response = await _axios2.default.call(void 0, requestOptions); + const response = await axios__default.default(requestOptions); if (response.status >= 1 && response.status <= 499) { this.setNodeHealthcheck(node, HEALTHY); } @@ -413,14 +416,14 @@ var ApiCall = class { return Promise.reject( this.customErrorForResponse( response, - _optionalChain([response, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message]), + response.data?.message, requestOptions.data ) ); } else { throw this.customErrorForResponse( response, - _optionalChain([response, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]), + response.data?.message, requestOptions.data ); } @@ -430,7 +433,7 @@ var ApiCall = class { } lastException = error; this.logger.warn( - `Request #${requestNumber}: Request to Node ${node.index} failed due to "${_nullishCoalesce(_optionalChain([error, 'optionalAccess', _6 => _6.code]), () => ( ""))} ${error.message}${error.response == null ? "" : " - " + JSON.stringify(_optionalChain([error, 'access', _7 => _7.response, 'optionalAccess', _8 => _8.data]))}"` + `Request #${requestNumber}: Request to Node ${node.index} failed due to "${error?.code ?? ""} ${error.message}${error.response == null ? "" : " - " + JSON.stringify(error.response?.data)}"` ); if (wasAborted) { return Promise.reject(new Error("Request aborted by caller.")); @@ -693,7 +696,7 @@ var SearchOnlyDocuments = class { ); } endpointPath(operation) { - return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH2}${operation === void 0 ? "" : "/" + operation}`; + return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH2}${operation === undefined ? "" : "/" + operation}`; } static get RESOURCEPATH() { return RESOURCEPATH2; @@ -866,7 +869,7 @@ var Documents = class extends SearchOnlyDocuments { // src/Typesense/Utils.ts function hasNoArrayValues(params) { - return Object.keys(arrayableParams).filter((key) => params[key] !== void 0).every((key) => isNonArrayValue(params[key])); + return Object.keys(arrayableParams).filter((key) => params[key] !== undefined).every((key) => isNonArrayValue(params[key])); } function normalizeArrayableParams(params) { const result = { ...params }; @@ -950,7 +953,7 @@ var SearchOnlyCollection = class { // src/Typesense/SearchClient.ts var SearchClient = class { constructor(options) { - options.sendApiKeyAsQueryParam = _nullishCoalesce(options.sendApiKeyAsQueryParam, () => ( true)); + options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true; if (options.sendApiKeyAsQueryParam === true && (options.apiKey || "").length > 2e3) { console.warn( "[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter." @@ -974,7 +977,7 @@ var SearchClient = class { "Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object." ); } else { - if (this.individualCollections[collectionName] === void 0) { + if (this.individualCollections[collectionName] === undefined) { this.individualCollections[collectionName] = new SearchOnlyCollection( collectionName, this.apiCall, @@ -1003,7 +1006,7 @@ var Overrides = class _Overrides { return this.apiCall.get(this.endpointPath()); } endpointPath(operation) { - return `${Collections.RESOURCEPATH}/${this.collectionName}${_Overrides.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${Collections.RESOURCEPATH}/${this.collectionName}${_Overrides.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH4; @@ -1045,7 +1048,7 @@ var Synonyms = class _Synonyms { return this.apiCall.get(this.endpointPath()); } endpointPath(operation) { - return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${_Synonyms.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${_Synonyms.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH5; @@ -1133,7 +1136,7 @@ var Collection = class { if (!documentId) { return this._documents; } else { - if (this.individualDocuments[documentId] === void 0) { + if (this.individualDocuments[documentId] === undefined) { this.individualDocuments[documentId] = new Document( this.name, documentId, @@ -1144,10 +1147,10 @@ var Collection = class { } } overrides(overrideId) { - if (overrideId === void 0) { + if (overrideId === undefined) { return this._overrides; } else { - if (this.individualOverrides[overrideId] === void 0) { + if (this.individualOverrides[overrideId] === undefined) { this.individualOverrides[overrideId] = new Override( this.name, overrideId, @@ -1158,10 +1161,10 @@ var Collection = class { } } synonyms(synonymId) { - if (synonymId === void 0) { + if (synonymId === undefined) { return this._synonyms; } else { - if (this.individualSynonyms[synonymId] === void 0) { + if (this.individualSynonyms[synonymId] === undefined) { this.individualSynonyms[synonymId] = new Synonym( this.name, synonymId, @@ -1345,7 +1348,7 @@ var Presets = class _Presets { return this.apiCall.get(this.endpointPath()); } endpointPath(operation) { - return `${_Presets.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${_Presets.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH13; @@ -1386,7 +1389,7 @@ var AnalyticsRules = class _AnalyticsRules { return this.apiCall.get(this.endpointPath()); } endpointPath(operation) { - return `${_AnalyticsRules.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${_AnalyticsRules.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH14; @@ -1424,7 +1427,7 @@ var AnalyticsEvents = class _AnalyticsEvents { ); } endpointPath(operation) { - return `${_AnalyticsEvents.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${_AnalyticsEvents.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH15; @@ -1442,10 +1445,10 @@ var Analytics = class { this._analyticsEvents = new AnalyticsEvents(this.apiCall); } rules(id) { - if (id === void 0) { + if (id === undefined) { return this._analyticsRules; } else { - if (this.individualAnalyticsRules[id] === void 0) { + if (this.individualAnalyticsRules[id] === undefined) { this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall); } return this.individualAnalyticsRules[id]; @@ -1475,7 +1478,7 @@ var Stopwords = class _Stopwords { return this.apiCall.get(this.endpointPath()); } endpointPath(operation) { - return `${_Stopwords.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${_Stopwords.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH17; @@ -1518,7 +1521,7 @@ var ConversationModels = class _ConversationModels { ); } endpointPath(operation) { - return `${_ConversationModels.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${_ConversationModels.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH18; @@ -1563,10 +1566,10 @@ var Conversations = class { return this.apiCall.get(RESOURCEPATH19); } models(id) { - if (id === void 0) { + if (id === undefined) { return this._conversationsModels; } else { - if (this.individualConversationModels[id] === void 0) { + if (this.individualConversationModels[id] === undefined) { this.individualConversationModels[id] = new ConversationModel( id, this.apiCall @@ -1632,7 +1635,7 @@ var StemmingDictionaries = class _StemmingDictionaries { ); } endpointPath(operation) { - return operation === void 0 ? `${_StemmingDictionaries.RESOURCEPATH}` : `${_StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`; + return operation === undefined ? `${_StemmingDictionaries.RESOURCEPATH}` : `${_StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH20; @@ -1663,10 +1666,10 @@ var Stemming = class { this._stemmingDictionaries = new StemmingDictionaries(this.apiCall); } dictionaries(id) { - if (id === void 0) { + if (id === undefined) { return this._stemmingDictionaries; } else { - if (this.individualStemmingDictionaries[id] === void 0) { + if (this.individualStemmingDictionaries[id] === undefined) { this.individualStemmingDictionaries[id] = new StemmingDictionary( id, this.apiCall @@ -1683,7 +1686,7 @@ var Stemming = class { // src/Typesense/Client.ts var Client = class { constructor(options) { - options.sendApiKeyAsQueryParam = _nullishCoalesce(options.sendApiKeyAsQueryParam, () => ( false)); + options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false; this.configuration = new Configuration(options); this.apiCall = new ApiCall(this.configuration); this.debug = new Debug(this.apiCall); @@ -1708,10 +1711,10 @@ var Client = class { this.individualConversations = {}; } collections(collectionName) { - if (collectionName === void 0) { + if (collectionName === undefined) { return this._collections; } else { - if (this.individualCollections[collectionName] === void 0) { + if (this.individualCollections[collectionName] === undefined) { this.individualCollections[collectionName] = new Collection( collectionName, this.apiCall, @@ -1722,50 +1725,50 @@ var Client = class { } } aliases(aliasName) { - if (aliasName === void 0) { + if (aliasName === undefined) { return this._aliases; } else { - if (this.individualAliases[aliasName] === void 0) { + if (this.individualAliases[aliasName] === undefined) { this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall); } return this.individualAliases[aliasName]; } } keys(id) { - if (id === void 0) { + if (id === undefined) { return this._keys; } else { - if (this.individualKeys[id] === void 0) { + if (this.individualKeys[id] === undefined) { this.individualKeys[id] = new Key(id, this.apiCall); } return this.individualKeys[id]; } } presets(id) { - if (id === void 0) { + if (id === undefined) { return this._presets; } else { - if (this.individualPresets[id] === void 0) { + if (this.individualPresets[id] === undefined) { this.individualPresets[id] = new Preset(id, this.apiCall); } return this.individualPresets[id]; } } stopwords(id) { - if (id === void 0) { + if (id === undefined) { return this._stopwords; } else { - if (this.individualStopwords[id] === void 0) { + if (this.individualStopwords[id] === undefined) { this.individualStopwords[id] = new Stopword(id, this.apiCall); } return this.individualStopwords[id]; } } conversations(id) { - if (id === void 0) { + if (id === undefined) { return this._conversations; } else { - if (this.individualConversations[id] === void 0) { + if (this.individualConversations[id] === undefined) { this.individualConversations[id] = new Conversation(id, this.apiCall); } return this.individualConversations[id]; @@ -1773,7 +1776,6 @@ var Client = class { } }; - - - -exports.Client = Client; exports.Errors = Errors_exports; exports.SearchClient = SearchClient; +exports.Client = Client; +exports.Errors = Errors_exports; +exports.SearchClient = SearchClient; diff --git a/dist/typesense.min.js b/dist/typesense.min.js index fe4c9e57..34579378 100644 --- a/dist/typesense.min.js +++ b/dist/typesense.min.js @@ -1,11 +1,1783 @@ -"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var Fe=Object.create;var Ce=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,Je=Object.prototype.hasOwnProperty;var Se=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Qe=(r,e)=>{for(var t in e)Ce(r,t,{get:e[t],enumerable:!0})},Be=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ze(e))!Je.call(r,n)&&n!==t&&Ce(r,n,{get:()=>e[n],enumerable:!(i=je(e,n))||i.enumerable});return r};var ve=(r,e,t)=>(t=r!=null?Fe(Le(r)):{},Be(e||!r||!r.__esModule?Ce(t,"default",{value:r,enumerable:!0}):t,r));var Te=Se((Bt,be)=>{"use strict";be.exports={}});var we=Se((Vt,Ee)=>{"use strict";Ee.exports={}});var ke=Se((ti,Ie)=>{"use strict";Ie.exports={}});var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel);var _e={};Qe(_e,{HTTPError:()=>R,ImportError:()=>y,MissingConfigurationError:()=>g,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>f,ObjectUnprocessable:()=>A,RequestMalformed:()=>_,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype)}};var R=class extends l{};var g=class extends l{};var x=class extends l{};var f=class extends l{};var A=class extends l{};var _=class extends l{};var b=class extends l{};var T=class extends l{};var y=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==void 0&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||_loglevel2.default,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new g("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new g("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new g("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}};var De=ve(Te()),Ne=ve(we());var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var Ye="X-TYPESENSE-API-KEY",Pe=!0,Ge=!1,Oe=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:i=null,responseType:n=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:n})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},n={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:n})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?_axios2.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis):_axios2.default.getAdapter(this.configuration.axiosAdapter):void 0}async performRequest(e,t,{queryParameters:i=null,bodyParameters:n=null,additionalHeaders:s={},abortSignal:a=null,responseType:h=void 0,skipConnectionTimeout:m=!1,enableKeepAlive:C=void 0}){this.configuration.validate();let c=Date.now(),S,j=!1;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),s,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:z=>z>0,transformResponse:[(z,L)=>{let Ae=z;return L!==void 0&&typeof z=="string"&&L["content-type"]&&L["content-type"].startsWith("application/json")&&(Ae=JSON.parse(z)),Ae}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Oe?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new De.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Oe?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new Ne.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),n&&(typeof n=="string"&&n.length!==0||typeof n=="object"&&Object.keys(n).length!==0)&&(o.data=n),a){let L=_axios2.default.CancelToken.source();Q=()=>{j=!0,L.cancel()},a.addEventListener("abort",Q),o.cancelToken=L.token}let d=await _axios2.default.call(void 0, o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Pe),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,_optionalChain([d, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.message]),o.data));throw this.customErrorForResponse(d,_optionalChain([d, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.message]),o.data)}catch(o){if(j||this.setNodeHealthcheck(P,Ge),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${_nullishCoalesce(_optionalChain([o, 'optionalAccess', _6 => _6.code]), () => (""))} ${o.message}${o.response==null?"":" - "+JSON.stringify(_optionalChain([o, 'access', _7 => _7.response, 'optionalAccess', _8 => _8.data]))}"`),j)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Pe)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Pe)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ye]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let n=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(n+=` | Server said: ${t}`);let s=new l(n,i,e.status);return e.status===400?s=new _(n):e.status===401?s=new b(n):e.status===404?s=new f(n):e.status===409?s=new x(n):e.status===422?s=new A(n):e.status>=500&&e.status<=599?s=new T(n):s=new R(n),s}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,i,n){let{cacheResponseForSeconds:s=120,maxSize:a=100}=n;if(s<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o)}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o)}return v}};var Re="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(Re,e,t)}async retrieve(e={}){return this.apiCall.get(Re,e)}static get RESOURCEPATH(){return Re}};var Ue="/documents",J=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let s=u(e),a=Object.assign({},n,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ue}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ue}};var xe={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},He=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,D=class extends J{constructor(e,t,i){super(e,t,i)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(s=>JSON.stringify(s)).join(` -`)}catch(s){throw s instanceof RangeError&&s.message.includes("Too many properties to enumerate")?new Error(`${s} +'use strict'; + +var logger = require('loglevel'); +var axios = require('axios'); + +function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } + +var logger__default = /*#__PURE__*/_interopDefault(logger); +var axios__default = /*#__PURE__*/_interopDefault(axios); + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// node-modules-polyfills-empty:http +var require_http = __commonJS({ + "node-modules-polyfills-empty:http"(exports, module) { + module.exports = {}; + } +}); + +// node-modules-polyfills-empty:https +var require_https = __commonJS({ + "node-modules-polyfills-empty:https"(exports, module) { + module.exports = {}; + } +}); + +// node-modules-polyfills-empty:crypto +var require_crypto = __commonJS({ + "node-modules-polyfills-empty:crypto"(exports, module) { + module.exports = {}; + } +}); + +// src/Typesense/Errors/index.ts +var Errors_exports = {}; +__export(Errors_exports, { + HTTPError: () => HTTPError, + ImportError: () => ImportError, + MissingConfigurationError: () => MissingConfigurationError, + ObjectAlreadyExists: () => ObjectAlreadyExists, + ObjectNotFound: () => ObjectNotFound, + ObjectUnprocessable: () => ObjectUnprocessable, + RequestMalformed: () => RequestMalformed, + RequestUnauthorized: () => RequestUnauthorized, + ServerError: () => ServerError, + TypesenseError: () => TypesenseError +}); + +// src/Typesense/Errors/TypesenseError.ts +var TypesenseError = class extends Error { + // Source: https://stackoverflow.com/a/58417721/123545 + constructor(message, httpBody, httpStatus) { + super(message); + this.name = new.target.name; + this.httpBody = httpBody; + this.httpStatus = httpStatus; + Object.setPrototypeOf(this, new.target.prototype); + } +}; + +// src/Typesense/Errors/HTTPError.ts +var HTTPError = class extends TypesenseError { +}; + +// src/Typesense/Errors/MissingConfigurationError.ts +var MissingConfigurationError = class extends TypesenseError { +}; + +// src/Typesense/Errors/ObjectAlreadyExists.ts +var ObjectAlreadyExists = class extends TypesenseError { +}; + +// src/Typesense/Errors/ObjectNotFound.ts +var ObjectNotFound = class extends TypesenseError { +}; + +// src/Typesense/Errors/ObjectUnprocessable.ts +var ObjectUnprocessable = class extends TypesenseError { +}; + +// src/Typesense/Errors/RequestMalformed.ts +var RequestMalformed = class extends TypesenseError { +}; + +// src/Typesense/Errors/RequestUnauthorized.ts +var RequestUnauthorized = class extends TypesenseError { +}; + +// src/Typesense/Errors/ServerError.ts +var ServerError = class extends TypesenseError { +}; + +// src/Typesense/Errors/ImportError.ts +var ImportError = class extends TypesenseError { + constructor(message, importResults, payload) { + super(message); + this.importResults = importResults; + this.payload = payload; + } +}; + +// src/Typesense/Configuration.ts +var Configuration = class { + constructor(options) { + this.nodes = options.nodes || []; + this.nodes = this.nodes.map((node) => this.setDefaultPathInNode(node)).map((node) => this.setDefaultPortInNode(node)).map((node) => ({ ...node })); + if (options.randomizeNodes == null) { + options.randomizeNodes = true; + } + if (options.randomizeNodes === true) { + this.shuffleArray(this.nodes); + } + this.nearestNode = options.nearestNode; + this.nearestNode = this.setDefaultPathInNode(this.nearestNode); + this.nearestNode = this.setDefaultPortInNode(this.nearestNode); + this.connectionTimeoutSeconds = options.connectionTimeoutSeconds || options.timeoutSeconds || 5; + this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60; + this.numRetries = (options.numRetries !== undefined && options.numRetries >= 0 ? options.numRetries : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; + this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1; + this.apiKey = options.apiKey; + this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; + this.cacheSearchResultsForSeconds = options.cacheSearchResultsForSeconds || 0; + this.useServerSideSearchCache = options.useServerSideSearchCache || false; + this.axiosAdapter = options.axiosAdapter; + this.logger = options.logger || logger__default.default; + this.logLevel = options.logLevel || "warn"; + this.logger.setLevel(this.logLevel); + this.additionalHeaders = options.additionalHeaders; + this.httpAgent = options.httpAgent; + this.httpsAgent = options.httpsAgent; + this.paramsSerializer = options.paramsSerializer; + this.showDeprecationWarnings(options); + this.validate(); + } + validate() { + if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) { + throw new MissingConfigurationError( + "Ensure that nodes[].protocol, nodes[].host and nodes[].port are set" + ); + } + if (this.nearestNode != null && this.isNodeMissingAnyParameters(this.nearestNode)) { + throw new MissingConfigurationError( + "Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set" + ); + } + if (this.apiKey == null) { + throw new MissingConfigurationError("Ensure that apiKey is set"); + } + return true; + } + validateNodes() { + return this.nodes.some((node) => { + return this.isNodeMissingAnyParameters(node); + }); + } + isNodeMissingAnyParameters(node) { + return !["protocol", "host", "port", "path"].every((key) => { + return node.hasOwnProperty(key); + }) && node["url"] == null; + } + setDefaultPathInNode(node) { + if (node != null && !node.hasOwnProperty("path")) { + node["path"] = ""; + } + return node; + } + setDefaultPortInNode(node) { + if (node != null && !node.hasOwnProperty("port") && node.hasOwnProperty("protocol")) { + switch (node["protocol"]) { + case "https": + node["port"] = 443; + break; + case "http": + node["port"] = 80; + break; + } + } + return node; + } + showDeprecationWarnings(options) { + if (options.timeoutSeconds) { + this.logger.warn( + "Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds" + ); + } + if (options.masterNode) { + this.logger.warn( + "Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12" + ); + } + if (options.readReplicaNodes) { + this.logger.warn( + "Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12" + ); + } + } + shuffleArray(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } + } +}; + +// src/Typesense/ApiCall.ts +var import_http = __toESM(require_http()); +var import_https = __toESM(require_https()); +var APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; +var HEALTHY = true; +var UNHEALTHY = false; +var isNodeJSEnvironment = typeof process !== "undefined" && process.versions != null && process.versions.node != null; +var ApiCall = class { + constructor(configuration) { + this.configuration = configuration; + this.apiKey = this.configuration.apiKey; + this.nodes = this.configuration.nodes == null ? this.configuration.nodes : JSON.parse(JSON.stringify(this.configuration.nodes)); + this.nearestNode = this.configuration.nearestNode == null ? this.configuration.nearestNode : JSON.parse(JSON.stringify(this.configuration.nearestNode)); + this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds; + this.healthcheckIntervalSeconds = this.configuration.healthcheckIntervalSeconds; + this.numRetriesPerRequest = this.configuration.numRetries; + this.retryIntervalSeconds = this.configuration.retryIntervalSeconds; + this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam; + this.additionalUserHeaders = this.configuration.additionalHeaders; + this.logger = this.configuration.logger; + this.initializeMetadataForNodes(); + this.currentNodeIndex = -1; + } + async get(endpoint, queryParameters = {}, { + abortSignal = null, + responseType = undefined + } = {}) { + return this.performRequest("get", endpoint, { + queryParameters, + abortSignal, + responseType + }); + } + async delete(endpoint, queryParameters = {}) { + return this.performRequest("delete", endpoint, { queryParameters }); + } + async post(endpoint, bodyParameters = {}, queryParameters = {}, additionalHeaders = {}) { + return this.performRequest("post", endpoint, { + queryParameters, + bodyParameters, + additionalHeaders + }); + } + async put(endpoint, bodyParameters = {}, queryParameters = {}) { + return this.performRequest("put", endpoint, { + queryParameters, + bodyParameters + }); + } + async patch(endpoint, bodyParameters = {}, queryParameters = {}) { + return this.performRequest("patch", endpoint, { + queryParameters, + bodyParameters + }); + } + getAdapter() { + if (!this.configuration.axiosAdapter) return undefined; + if (typeof this.configuration.axiosAdapter === "function") + return this.configuration.axiosAdapter; + const isCloudflareWorkers = typeof navigator !== "undefined" && navigator.userAgent === "Cloudflare-Workers"; + return isCloudflareWorkers ? axios__default.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis) : axios__default.default.getAdapter(this.configuration.axiosAdapter); + } + async performRequest(requestType, endpoint, { + queryParameters = null, + bodyParameters = null, + additionalHeaders = {}, + abortSignal = null, + responseType = undefined, + skipConnectionTimeout = false, + enableKeepAlive = undefined + }) { + this.configuration.validate(); + const requestNumber = Date.now(); + let lastException; + let wasAborted = false; + this.logger.debug( + `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}` + ); + for (let numTries = 1; numTries <= this.numRetriesPerRequest + 1; numTries++) { + const node = this.getNextNode(requestNumber); + this.logger.debug( + `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${node.index}` + ); + if (abortSignal && abortSignal.aborted) { + return Promise.reject(new Error("Request aborted by caller.")); + } + let abortListener; + try { + const requestOptions = { + adapter: this.getAdapter(), + method: requestType, + url: this.uriFor(endpoint, node), + headers: Object.assign( + {}, + this.defaultHeaders(), + additionalHeaders, + this.additionalUserHeaders + ), + maxContentLength: Infinity, + maxBodyLength: Infinity, + responseType, + validateStatus: (status) => { + return status > 0; + }, + transformResponse: [ + (data, headers) => { + let transformedData = data; + if (headers !== void 0 && typeof data === "string" && headers["content-type"] && headers["content-type"].startsWith("application/json")) { + transformedData = JSON.parse(data); + } + return transformedData; + } + ] + }; + if (skipConnectionTimeout !== true) { + requestOptions.timeout = this.connectionTimeoutSeconds * 1e3; + } + if (queryParameters && Object.keys(queryParameters).length !== 0) { + requestOptions.params = queryParameters; + } + if (this.sendApiKeyAsQueryParam) { + requestOptions.params = requestOptions.params || {}; + requestOptions.params["x-typesense-api-key"] = this.apiKey; + } + if (this.configuration.httpAgent) { + this.logger.debug( + `Request #${requestNumber}: Using custom httpAgent` + ); + requestOptions.httpAgent = this.configuration.httpAgent; + } else if (enableKeepAlive === true) { + if (!isNodeJSEnvironment) { + this.logger.warn( + `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive` + ); + } else { + this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`); + requestOptions.httpAgent = new import_http.Agent({ keepAlive: true }); + } + } + if (this.configuration.httpsAgent) { + this.logger.debug( + `Request #${requestNumber}: Using custom httpsAgent` + ); + requestOptions.httpsAgent = this.configuration.httpsAgent; + } else if (enableKeepAlive === true) { + if (!isNodeJSEnvironment) { + this.logger.warn( + `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive` + ); + } else { + this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`); + requestOptions.httpsAgent = new import_https.Agent({ keepAlive: true }); + } + } + if (this.configuration.paramsSerializer) { + this.logger.debug( + `Request #${requestNumber}: Using custom paramsSerializer` + ); + requestOptions.paramsSerializer = this.configuration.paramsSerializer; + } + if (bodyParameters && (typeof bodyParameters === "string" && bodyParameters.length !== 0 || typeof bodyParameters === "object" && Object.keys(bodyParameters).length !== 0)) { + requestOptions.data = bodyParameters; + } + if (abortSignal) { + const cancelToken = axios__default.default.CancelToken; + const source = cancelToken.source(); + abortListener = () => { + wasAborted = true; + source.cancel(); + }; + abortSignal.addEventListener("abort", abortListener); + requestOptions.cancelToken = source.token; + } + const response = await axios__default.default(requestOptions); + if (response.status >= 1 && response.status <= 499) { + this.setNodeHealthcheck(node, HEALTHY); + } + this.logger.debug( + `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.` + ); + if (response.status >= 200 && response.status < 300) { + return Promise.resolve(response.data); + } else if (response.status < 500) { + return Promise.reject( + this.customErrorForResponse( + response, + response.data?.message, + requestOptions.data + ) + ); + } else { + throw this.customErrorForResponse( + response, + response.data?.message, + requestOptions.data + ); + } + } catch (error) { + if (!wasAborted) { + this.setNodeHealthcheck(node, UNHEALTHY); + } + lastException = error; + this.logger.warn( + `Request #${requestNumber}: Request to Node ${node.index} failed due to "${error?.code ?? ""} ${error.message}${error.response == null ? "" : " - " + JSON.stringify(error.response?.data)}"` + ); + if (wasAborted) { + return Promise.reject(new Error("Request aborted by caller.")); + } + if (numTries < this.numRetriesPerRequest + 1) { + this.logger.warn( + `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...` + ); + } + await this.timer(this.retryIntervalSeconds); + } finally { + if (abortSignal && abortListener) { + abortSignal.removeEventListener("abort", abortListener); + } + } + } + this.logger.debug( + `Request #${requestNumber}: No retries left. Raising last error` + ); + return Promise.reject(lastException); + } + // Attempts to find the next healthy node, looping through the list of nodes once. + // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy + // so we can try the request for good measure, in case that node has become healthy since + getNextNode(requestNumber = 0) { + if (this.nearestNode != null) { + this.logger.debug( + `Request #${requestNumber}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy === true ? "Healthy" : "Unhealthy"}` + ); + if (this.nearestNode.isHealthy === true || this.nodeDueForHealthcheck(this.nearestNode, requestNumber)) { + this.logger.debug( + `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}` + ); + return this.nearestNode; + } + this.logger.debug( + `Request #${requestNumber}: Falling back to individual nodes` + ); + } + this.logger.debug( + `Request #${requestNumber}: Nodes Health: ${this.nodes.map( + (node) => `Node ${node.index} is ${node.isHealthy === true ? "Healthy" : "Unhealthy"}` + ).join(" || ")}` + ); + let candidateNode = this.nodes[0]; + for (let i = 0; i <= this.nodes.length; i++) { + this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length; + candidateNode = this.nodes[this.currentNodeIndex]; + if (candidateNode.isHealthy === true || this.nodeDueForHealthcheck(candidateNode, requestNumber)) { + this.logger.debug( + `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}` + ); + return candidateNode; + } + } + this.logger.debug( + `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}` + ); + return candidateNode; + } + nodeDueForHealthcheck(node, requestNumber = 0) { + const isDueForHealthcheck = Date.now() - node.lastAccessTimestamp > this.healthcheckIntervalSeconds * 1e3; + if (isDueForHealthcheck) { + this.logger.debug( + `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.` + ); + } + return isDueForHealthcheck; + } + initializeMetadataForNodes() { + if (this.nearestNode != null) { + this.nearestNode.index = "nearestNode"; + this.setNodeHealthcheck(this.nearestNode, HEALTHY); + } + this.nodes.forEach((node, i) => { + node.index = i; + this.setNodeHealthcheck(node, HEALTHY); + }); + } + setNodeHealthcheck(node, isHealthy) { + node.isHealthy = isHealthy; + node.lastAccessTimestamp = Date.now(); + } + uriFor(endpoint, node) { + if (node.url != null) { + return `${node.url}${endpoint}`; + } + return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`; + } + defaultHeaders() { + const defaultHeaders = {}; + if (!this.sendApiKeyAsQueryParam) { + defaultHeaders[APIKEYHEADERNAME] = this.apiKey; + } + defaultHeaders["Content-Type"] = "application/json"; + return defaultHeaders; + } + async timer(seconds) { + return new Promise((resolve) => setTimeout(resolve, seconds * 1e3)); + } + customErrorForResponse(response, messageFromServer, httpBody) { + let errorMessage = `Request failed with HTTP code ${response.status}`; + if (typeof messageFromServer === "string" && messageFromServer.trim() !== "") { + errorMessage += ` | Server said: ${messageFromServer}`; + } + let error = new TypesenseError(errorMessage, httpBody, response.status); + if (response.status === 400) { + error = new RequestMalformed(errorMessage); + } else if (response.status === 401) { + error = new RequestUnauthorized(errorMessage); + } else if (response.status === 404) { + error = new ObjectNotFound(errorMessage); + } else if (response.status === 409) { + error = new ObjectAlreadyExists(errorMessage); + } else if (response.status === 422) { + error = new ObjectUnprocessable(errorMessage); + } else if (response.status >= 500 && response.status <= 599) { + error = new ServerError(errorMessage); + } else { + error = new HTTPError(errorMessage); + } + return error; + } +}; + +// src/Typesense/RequestWithCache.ts +var defaultCacheResponseForSeconds = 2 * 60; +var defaultMaxSize = 100; +var RequestWithCache = class { + constructor() { + this.responseCache = /* @__PURE__ */ new Map(); + this.responsePromiseCache = /* @__PURE__ */ new Map(); + } + clearCache() { + this.responseCache = /* @__PURE__ */ new Map(); + this.responsePromiseCache = /* @__PURE__ */ new Map(); + } + // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way + async perform(requestContext, requestFunction, requestFunctionArguments, cacheOptions) { + const { + cacheResponseForSeconds = defaultCacheResponseForSeconds, + maxSize = defaultMaxSize + } = cacheOptions; + const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0; + if (isCacheDisabled) { + return requestFunction.call(requestContext, ...requestFunctionArguments); + } + const requestFunctionArgumentsJSON = JSON.stringify( + requestFunctionArguments + ); + const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON); + const now = Date.now(); + if (cacheEntry) { + const isEntryValid = now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1e3; + if (isEntryValid) { + this.responseCache.delete(requestFunctionArgumentsJSON); + this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry); + return Promise.resolve(cacheEntry.response); + } else { + this.responseCache.delete(requestFunctionArgumentsJSON); + } + } + const cachePromiseEntry = this.responsePromiseCache.get( + requestFunctionArgumentsJSON + ); + if (cachePromiseEntry) { + const isEntryValid = now - cachePromiseEntry.requestTimestamp < cacheResponseForSeconds * 1e3; + if (isEntryValid) { + this.responsePromiseCache.delete(requestFunctionArgumentsJSON); + this.responsePromiseCache.set( + requestFunctionArgumentsJSON, + cachePromiseEntry + ); + return cachePromiseEntry.responsePromise; + } else { + this.responsePromiseCache.delete(requestFunctionArgumentsJSON); + } + } + const responsePromise = requestFunction.call( + requestContext, + ...requestFunctionArguments + ); + this.responsePromiseCache.set(requestFunctionArgumentsJSON, { + requestTimestamp: now, + responsePromise + }); + const response = await responsePromise; + this.responseCache.set(requestFunctionArgumentsJSON, { + requestTimestamp: now, + response + }); + const isCacheOverMaxSize = this.responseCache.size > maxSize; + if (isCacheOverMaxSize) { + const oldestEntry = this.responseCache.keys().next().value; + if (oldestEntry) { + this.responseCache.delete(oldestEntry); + } + } + const isResponsePromiseCacheOverMaxSize = this.responsePromiseCache.size > maxSize; + if (isResponsePromiseCacheOverMaxSize) { + const oldestEntry = this.responsePromiseCache.keys().next().value; + if (oldestEntry) { + this.responsePromiseCache.delete(oldestEntry); + } + } + return response; + } +}; + +// src/Typesense/Collections.ts +var RESOURCEPATH = "/collections"; +var Collections = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async create(schema, options = {}) { + return this.apiCall.post(RESOURCEPATH, schema, options); + } + async retrieve(options = {}) { + return this.apiCall.get(RESOURCEPATH, options); + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +}; + +// src/Typesense/SearchOnlyDocuments.ts +var RESOURCEPATH2 = "/documents"; +var SearchOnlyDocuments = class { + constructor(collectionName, apiCall, configuration) { + this.collectionName = collectionName; + this.apiCall = apiCall; + this.configuration = configuration; + this.requestWithCache = new RequestWithCache(); + } + clearCache() { + this.requestWithCache.clearCache(); + } + async search(searchParameters, { + cacheSearchResultsForSeconds = this.configuration.cacheSearchResultsForSeconds, + abortSignal = null + } = {}) { + const additionalQueryParams = {}; + if (this.configuration.useServerSideSearchCache === true) { + additionalQueryParams["use_cache"] = true; + } + const normalizedParams = normalizeArrayableParams(searchParameters); + const queryParams = Object.assign( + {}, + additionalQueryParams, + normalizedParams + ); + return this.requestWithCache.perform( + this.apiCall, + this.apiCall.get, + [this.endpointPath("search"), queryParams, { abortSignal }], + { + cacheResponseForSeconds: cacheSearchResultsForSeconds + } + ); + } + endpointPath(operation) { + return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH2}${operation === undefined ? "" : "/" + operation}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH2; + } +}; + +// src/Typesense/Documents.ts +var arrayableParams = { + query_by: "query_by", + query_by_weights: "query_by_weights", + facet_by: "facet_by", + group_by: "group_by", + include_fields: "include_fields", + exclude_fields: "exclude_fields", + highlight_fields: "highlight_fields", + highlight_full_fields: "highlight_full_fields", + pinned_hits: "pinned_hits", + hidden_hits: "hidden_hits", + infix: "infix", + override_tags: "override_tags", + num_typos: "num_typos", + prefix: "prefix", + sort_by: "sort_by" +}; +var isNodeJSEnvironment2 = typeof process !== "undefined" && process.versions != null && process.versions.node != null; +var Documents = class extends SearchOnlyDocuments { + constructor(collectionName, apiCall, configuration) { + super(collectionName, apiCall, configuration); + } + async create(document, options = {}) { + if (!document) throw new Error("No document provided"); + return this.apiCall.post(this.endpointPath(), document, options); + } + async upsert(document, options = {}) { + if (!document) throw new Error("No document provided"); + return this.apiCall.post( + this.endpointPath(), + document, + Object.assign({}, options, { action: "upsert" }) + ); + } + async update(document, options = {}) { + if (!document) throw new Error("No document provided"); + if (options["filter_by"] != null) { + return this.apiCall.patch( + this.endpointPath(), + document, + Object.assign({}, options) + ); + } else { + return this.apiCall.post( + this.endpointPath(), + document, + Object.assign({}, options, { action: "update" }) + ); + } + } + async delete(query = {}) { + return this.apiCall.delete(this.endpointPath(), query); + } + async createMany(documents, options = {}) { + this.configuration.logger.warn( + "createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents" + ); + return this.import(documents, options); + } + async import(documents, options = {}) { + let documentsInJSONLFormat; + if (Array.isArray(documents)) { + try { + documentsInJSONLFormat = documents.map((document) => JSON.stringify(document)).join("\n"); + } catch (error) { + if (error instanceof RangeError && error.message.includes("Too many properties to enumerate")) { + throw new Error(`${error} It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object Please try reducing the number of keys in your document, or using CURL to import your data. - `):new Error(s)}else i=e;let n=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!He});if(Array.isArray(e)){let s=n.split(` -`).map(h=>JSON.parse(h)),a=s.filter(h=>h.success===!1);if(a.length>0)throw new y(`${s.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:s.length-a.length});return s}else return n}async importStream(e,t={}){let n=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!He})).split(` -`).map(a=>JSON.parse(a)),s=n.filter(a=>a.success===!1);if(s.length>0)throw new y(`${n.length-s.length} documents imported successfully, ${s.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:e,options:t,failedItems:s,successCount:n.length-s.length});return n}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function $e(r){return Object.keys(xe).filter(e=>r[e]!==void 0).every(e=>Xe(r[e]))}function u(r){let e={...r};if(!Object.keys(xe).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&$e(e))return e;if(!$e(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Xe(r){return!Array.isArray(r)}var Ze="/multi_search",N=class{constructor(e,t,i=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let n={};this.useTextContentType&&(n["content-type"]="text/plain");let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);let a={...t,...s},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ze,h,m,n],{cacheResponseForSeconds:i})}};var ue=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new J(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ge=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!0)),e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new N(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new ue(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var et="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return et}};var B=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var tt="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return tt}};var V=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var fe=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${D.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var Y=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new D(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof f)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new fe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new B(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new V(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var qe="/aliases",$=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(qe)}endpointPath(e){return`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Me=ve(ke());var Ke="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Ke)}generateScopedSearchKey(e,t){let i=u(t),n=JSON.stringify(i),s=Buffer.from((0,Me.createHmac)("sha256",e).update(n).digest("base64")),a=e.substr(0,4),h=`${s}${a}${n}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return Ke}};var X=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var rt="/debug",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(rt)}};var it="/metrics.json",ee=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(it)}};var nt="/stats.json",te=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(nt)}};var st="/health",re=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(st)}};var ot="/operations",ie=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ot}/${e}`,{},t)}};var at="/presets",I=class r{constructor(e){this.apiCall=e}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let n=t.value.searches.map(s=>u(s));return this.apiCall.put(this.endpointPath(e),{value:{searches:n}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return at}};var ne=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var lt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ct="/analytics/events",oe=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var pt="/analytics",ae=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new oe(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return pt}};var mt="/stopwords",K=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return mt}};var le=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var dt="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return dt}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var We="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall)}async retrieve(){return this.apiCall.get(We)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new ce(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return We}};var pe=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ht="/stemming/dictionaries",F=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){let i=Array.isArray(t)?t.map(s=>JSON.stringify(s)).join(` -`):t,n=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:{id:e},bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0});return Array.isArray(t)?n.split(` -`).map(s=>JSON.parse(s)):n}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return e===void 0?`${r.RESOURCEPATH}`:`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return ht}};var me=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(){return`${F.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ut="/stemming",de=class{constructor(e){this.apiCall=e;this.individualStemmingDictionaries={};this.apiCall=e,this._stemmingDictionaries=new F(this.apiCall)}dictionaries(e){return e===void 0?this._stemmingDictionaries:(this.individualStemmingDictionaries[e]===void 0&&(this.individualStemmingDictionaries[e]=new me(e,this.apiCall)),this.individualStemmingDictionaries[e])}static get RESOURCEPATH(){return ut}};var ye=class{constructor(e){e.sendApiKeyAsQueryParam=_nullishCoalesce(e.sendApiKeyAsQueryParam, () => (!1)),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new Z(this.apiCall),this.metrics=new ee(this.apiCall),this.stats=new te(this.apiCall),this.health=new re(this.apiCall),this.operations=new ie(this.apiCall),this.multiSearch=new N(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new ae(this.apiCall),this.stemming=new de(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new Y(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new G(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new X(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new ne(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new le(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new pe(e,this.apiCall)),this.individualConversations[e])}};exports.Client = ye; exports.Errors = _e; exports.SearchClient = ge; + `); + } + throw new Error(error); + } + } else { + documentsInJSONLFormat = documents; + } + const resultsInJSONLFormat = await this.apiCall.performRequest( + "post", + this.endpointPath("import"), + { + queryParameters: options, + bodyParameters: documentsInJSONLFormat, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, + // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully + enableKeepAlive: isNodeJSEnvironment2 ? true : false + // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 + } + ); + if (Array.isArray(documents)) { + const resultsInJSONFormat = resultsInJSONLFormat.split("\n").map((r) => JSON.parse(r)); + const failedItems = resultsInJSONFormat.filter( + (r) => r.success === false + ); + if (failedItems.length > 0) { + throw new ImportError( + `${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, + resultsInJSONFormat, + { + documentsInJSONLFormat, + options, + failedItems, + successCount: resultsInJSONFormat.length - failedItems.length + } + ); + } else { + return resultsInJSONFormat; + } + } else { + return resultsInJSONLFormat; + } + } + /** + * Imports documents from a NodeJS readable stream of JSONL. + */ + async importStream(readableStream, options = {}) { + const resultsInJSONLFormat = await this.apiCall.performRequest( + "post", + this.endpointPath("import"), + { + queryParameters: options, + bodyParameters: readableStream, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, + // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully + enableKeepAlive: isNodeJSEnvironment2 ? true : false + // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 + } + ); + const resultsInJSONFormat = resultsInJSONLFormat.split("\n").map((r) => JSON.parse(r)); + const failedItems = resultsInJSONFormat.filter((r) => r.success === false); + if (failedItems.length > 0) { + throw new ImportError( + `${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, + resultsInJSONFormat, + { + documentsInJSONLFormat: readableStream, + options, + failedItems, + successCount: resultsInJSONFormat.length - failedItems.length + } + ); + } else { + return resultsInJSONFormat; + } + } + /** + * Returns a JSONL string for all the documents in this collection + */ + async export(options = {}) { + return this.apiCall.get(this.endpointPath("export"), options); + } + /** + * Returns a NodeJS readable stream of JSONL for all the documents in this collection. + */ + async exportStream(options = {}) { + return this.apiCall.get(this.endpointPath("export"), options, { + responseType: "stream" + }); + } +}; + +// src/Typesense/Utils.ts +function hasNoArrayValues(params) { + return Object.keys(arrayableParams).filter((key) => params[key] !== undefined).every((key) => isNonArrayValue(params[key])); +} +function normalizeArrayableParams(params) { + const result = { ...params }; + const transformedValues = Object.keys(arrayableParams).filter((key) => Array.isArray(result[key])).map((key) => { + result[key] = result[key].join(","); + return key; + }); + if (!transformedValues.length && hasNoArrayValues(result)) { + return result; + } + if (!hasNoArrayValues(result)) { + throw new Error( + `Failed to normalize arrayable params: ${JSON.stringify(result)}` + ); + } + return result; +} +function isNonArrayValue(value) { + return !Array.isArray(value); +} + +// src/Typesense/MultiSearch.ts +var RESOURCEPATH3 = "/multi_search"; +var MultiSearch = class { + constructor(apiCall, configuration, useTextContentType = false) { + this.apiCall = apiCall; + this.configuration = configuration; + this.useTextContentType = useTextContentType; + this.requestWithCache = new RequestWithCache(); + } + clearCache() { + this.requestWithCache.clearCache(); + } + async perform(searchRequests, commonParams = {}, { + cacheSearchResultsForSeconds = this.configuration.cacheSearchResultsForSeconds + } = {}) { + const additionalHeaders = {}; + if (this.useTextContentType) { + additionalHeaders["content-type"] = "text/plain"; + } + const additionalQueryParams = {}; + if (this.configuration.useServerSideSearchCache === true) { + additionalQueryParams["use_cache"] = true; + } + const queryParams = { ...commonParams, ...additionalQueryParams }; + const normalizedSearchRequests = { + searches: searchRequests.searches.map(normalizeArrayableParams) + }; + const normalizedQueryParams = normalizeArrayableParams(queryParams); + return this.requestWithCache.perform( + this.apiCall, + this.apiCall.post, + [ + RESOURCEPATH3, + normalizedSearchRequests, + normalizedQueryParams, + additionalHeaders + ], + { cacheResponseForSeconds: cacheSearchResultsForSeconds } + ); + } +}; + +// src/Typesense/SearchOnlyCollection.ts +var SearchOnlyCollection = class { + constructor(name, apiCall, configuration) { + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this._documents = new SearchOnlyDocuments( + this.name, + this.apiCall, + this.configuration + ); + } + documents() { + return this._documents; + } +}; + +// src/Typesense/SearchClient.ts +var SearchClient = class { + constructor(options) { + options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true; + if (options.sendApiKeyAsQueryParam === true && (options.apiKey || "").length > 2e3) { + console.warn( + "[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter." + ); + options.sendApiKeyAsQueryParam = false; + } + this.configuration = new Configuration(options); + this.apiCall = new ApiCall(this.configuration); + this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true); + this.individualCollections = {}; + } + clearCache() { + this.multiSearch.clearCache(); + Object.entries(this.individualCollections).forEach(([_, collection]) => { + collection.documents().clearCache(); + }); + } + collections(collectionName) { + if (!collectionName) { + throw new Error( + "Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object." + ); + } else { + if (this.individualCollections[collectionName] === undefined) { + this.individualCollections[collectionName] = new SearchOnlyCollection( + collectionName, + this.apiCall, + this.configuration + ); + } + return this.individualCollections[collectionName]; + } + } +}; + +// src/Typesense/Overrides.ts +var RESOURCEPATH4 = "/overrides"; +var Overrides = class _Overrides { + constructor(collectionName, apiCall) { + this.collectionName = collectionName; + this.apiCall = apiCall; + } + async upsert(overrideId, params) { + return this.apiCall.put( + this.endpointPath(overrideId), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${Collections.RESOURCEPATH}/${this.collectionName}${_Overrides.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH4; + } +}; + +// src/Typesense/Override.ts +var Override = class { + constructor(collectionName, overrideId, apiCall) { + this.collectionName = collectionName; + this.overrideId = overrideId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`; + } +}; + +// src/Typesense/Synonyms.ts +var RESOURCEPATH5 = "/synonyms"; +var Synonyms = class _Synonyms { + constructor(collectionName, apiCall) { + this.collectionName = collectionName; + this.apiCall = apiCall; + } + async upsert(synonymId, params) { + return this.apiCall.put( + this.endpointPath(synonymId), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${_Synonyms.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH5; + } +}; + +// src/Typesense/Synonym.ts +var Synonym = class { + constructor(collectionName, synonymId, apiCall) { + this.collectionName = collectionName; + this.synonymId = synonymId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`; + } +}; + +// src/Typesense/Document.ts +var Document = class { + constructor(collectionName, documentId, apiCall) { + this.collectionName = collectionName; + this.documentId = documentId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete(options) { + return this.apiCall.delete(this.endpointPath(), options); + } + async update(partialDocument, options = {}) { + return this.apiCall.patch(this.endpointPath(), partialDocument, options); + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`; + } +}; + +// src/Typesense/Collection.ts +var Collection = class { + constructor(name, apiCall, configuration) { + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this.individualDocuments = {}; + this.individualOverrides = {}; + this.individualSynonyms = {}; + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this._documents = new Documents( + this.name, + this.apiCall, + this.configuration + ); + this._overrides = new Overrides(this.name, this.apiCall); + this._synonyms = new Synonyms(this.name, this.apiCall); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async update(schema) { + return this.apiCall.patch(this.endpointPath(), schema); + } + async delete(options = {}) { + return this.apiCall.delete(this.endpointPath(), options); + } + async exists() { + try { + await this.retrieve(); + return true; + } catch (e) { + if (e instanceof ObjectNotFound) return false; + throw e; + } + } + documents(documentId) { + if (!documentId) { + return this._documents; + } else { + if (this.individualDocuments[documentId] === undefined) { + this.individualDocuments[documentId] = new Document( + this.name, + documentId, + this.apiCall + ); + } + return this.individualDocuments[documentId]; + } + } + overrides(overrideId) { + if (overrideId === undefined) { + return this._overrides; + } else { + if (this.individualOverrides[overrideId] === undefined) { + this.individualOverrides[overrideId] = new Override( + this.name, + overrideId, + this.apiCall + ); + } + return this.individualOverrides[overrideId]; + } + } + synonyms(synonymId) { + if (synonymId === undefined) { + return this._synonyms; + } else { + if (this.individualSynonyms[synonymId] === undefined) { + this.individualSynonyms[synonymId] = new Synonym( + this.name, + synonymId, + this.apiCall + ); + } + return this.individualSynonyms[synonymId]; + } + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +}; + +// src/Typesense/Aliases.ts +var RESOURCEPATH6 = "/aliases"; +var Aliases = class _Aliases { + constructor(apiCall) { + this.apiCall = apiCall; + } + async upsert(name, mapping) { + return this.apiCall.put( + this.endpointPath(name), + mapping + ); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH6); + } + endpointPath(aliasName) { + return `${_Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH6; + } +}; + +// src/Typesense/Alias.ts +var Alias = class { + constructor(name, apiCall) { + this.name = name; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +}; + +// src/Typesense/Keys.ts +var import_crypto = __toESM(require_crypto()); +var RESOURCEPATH7 = "/keys"; +var Keys = class _Keys { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async create(params) { + return this.apiCall.post(_Keys.RESOURCEPATH, params); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH7); + } + generateScopedSearchKey(searchKey, parameters) { + const normalizedParams = normalizeArrayableParams(parameters); + const paramsJSON = JSON.stringify(normalizedParams); + const digest = Buffer.from( + (0, import_crypto.createHmac)("sha256", searchKey).update(paramsJSON).digest("base64") + ); + const keyPrefix = searchKey.substr(0, 4); + const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`; + return Buffer.from(rawScopedKey).toString("base64"); + } + static get RESOURCEPATH() { + return RESOURCEPATH7; + } +}; + +// src/Typesense/Key.ts +var Key = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/Debug.ts +var RESOURCEPATH8 = "/debug"; +var Debug = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH8); + } +}; + +// src/Typesense/Metrics.ts +var RESOURCEPATH9 = "/metrics.json"; +var Metrics = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH9); + } +}; + +// src/Typesense/Stats.ts +var RESOURCEPATH10 = "/stats.json"; +var Metrics2 = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH10); + } +}; + +// src/Typesense/Health.ts +var RESOURCEPATH11 = "/health"; +var Health = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH11); + } +}; + +// src/Typesense/Operations.ts +var RESOURCEPATH12 = "/operations"; +var Operations = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async perform(operationName, queryParameters = {}) { + return this.apiCall.post( + `${RESOURCEPATH12}/${operationName}`, + {}, + queryParameters + ); + } +}; + +// src/Typesense/Presets.ts +var RESOURCEPATH13 = "/presets"; +var Presets = class _Presets { + constructor(apiCall) { + this.apiCall = apiCall; + } + async upsert(presetId, params) { + if (typeof params.value === "object" && "searches" in params.value) { + const normalizedParams2 = params.value.searches.map( + (search) => normalizeArrayableParams(search) + ); + return this.apiCall.put(this.endpointPath(presetId), { + value: { searches: normalizedParams2 } + }); + } + const normalizedParams = normalizeArrayableParams(params.value); + return this.apiCall.put(this.endpointPath(presetId), { + value: normalizedParams + }); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${_Presets.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH13; + } +}; + +// src/Typesense/Preset.ts +var Preset = class { + constructor(presetId, apiCall) { + this.presetId = presetId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`; + } +}; + +// src/Typesense/AnalyticsRules.ts +var RESOURCEPATH14 = "/analytics/rules"; +var AnalyticsRules = class _AnalyticsRules { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async upsert(name, params) { + return this.apiCall.put( + this.endpointPath(name), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${_AnalyticsRules.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH14; + } +}; + +// src/Typesense/AnalyticsRule.ts +var AnalyticsRule = class { + constructor(name, apiCall) { + this.name = name; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +}; + +// src/Typesense/AnalyticsEvents.ts +var RESOURCEPATH15 = "/analytics/events"; +var AnalyticsEvents = class _AnalyticsEvents { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async create(params) { + return this.apiCall.post( + this.endpointPath(), + params + ); + } + endpointPath(operation) { + return `${_AnalyticsEvents.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH15; + } +}; + +// src/Typesense/Analytics.ts +var RESOURCEPATH16 = "/analytics"; +var Analytics = class { + constructor(apiCall) { + this.apiCall = apiCall; + this.individualAnalyticsRules = {}; + this.apiCall = apiCall; + this._analyticsRules = new AnalyticsRules(this.apiCall); + this._analyticsEvents = new AnalyticsEvents(this.apiCall); + } + rules(id) { + if (id === undefined) { + return this._analyticsRules; + } else { + if (this.individualAnalyticsRules[id] === undefined) { + this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall); + } + return this.individualAnalyticsRules[id]; + } + } + events() { + return this._analyticsEvents; + } + static get RESOURCEPATH() { + return RESOURCEPATH16; + } +}; + +// src/Typesense/Stopwords.ts +var RESOURCEPATH17 = "/stopwords"; +var Stopwords = class _Stopwords { + constructor(apiCall) { + this.apiCall = apiCall; + } + async upsert(stopwordId, params) { + return this.apiCall.put( + this.endpointPath(stopwordId), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${_Stopwords.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH17; + } +}; + +// src/Typesense/Stopword.ts +var Stopword = class { + constructor(stopwordId, apiCall) { + this.stopwordId = stopwordId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`; + } +}; + +// src/Typesense/ConversationModels.ts +var RESOURCEPATH18 = "/conversations/models"; +var ConversationModels = class _ConversationModels { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async create(params) { + return this.apiCall.post( + this.endpointPath(), + params + ); + } + async retrieve() { + return this.apiCall.get( + this.endpointPath() + ); + } + endpointPath(operation) { + return `${_ConversationModels.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH18; + } +}; + +// src/Typesense/ConversationModel.ts +var ConversationModel = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async update(params) { + return this.apiCall.put( + this.endpointPath(), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete( + this.endpointPath() + ); + } + endpointPath() { + return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/Conversations.ts +var RESOURCEPATH19 = "/conversations"; +var Conversations = class { + constructor(apiCall) { + this.apiCall = apiCall; + this.individualConversationModels = {}; + this.apiCall = apiCall; + this._conversationsModels = new ConversationModels(this.apiCall); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH19); + } + models(id) { + if (id === undefined) { + return this._conversationsModels; + } else { + if (this.individualConversationModels[id] === undefined) { + this.individualConversationModels[id] = new ConversationModel( + id, + this.apiCall + ); + } + return this.individualConversationModels[id]; + } + } + static get RESOURCEPATH() { + return RESOURCEPATH19; + } +}; + +// src/Typesense/Conversation.ts +var Conversation = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async update(params) { + return this.apiCall.put( + this.endpointPath(), + params + ); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/StemmingDictionaries.ts +var RESOURCEPATH20 = "/stemming/dictionaries"; +var StemmingDictionaries = class _StemmingDictionaries { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async upsert(id, wordRootCombinations) { + const wordRootCombinationsInJSONLFormat = Array.isArray( + wordRootCombinations + ) ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join("\n") : wordRootCombinations; + const resultsInJSONLFormat = await this.apiCall.performRequest( + "post", + this.endpointPath("import"), + { + queryParameters: { id }, + bodyParameters: wordRootCombinationsInJSONLFormat, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true + } + ); + return Array.isArray(wordRootCombinations) ? resultsInJSONLFormat.split("\n").map((line) => JSON.parse(line)) : resultsInJSONLFormat; + } + async retrieve() { + return this.apiCall.get( + this.endpointPath() + ); + } + endpointPath(operation) { + return operation === undefined ? `${_StemmingDictionaries.RESOURCEPATH}` : `${_StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH20; + } +}; + +// src/Typesense/StemmingDictionary.ts +var StemmingDictionary = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath() { + return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/Stemming.ts +var RESOURCEPATH21 = "/stemming"; +var Stemming = class { + constructor(apiCall) { + this.apiCall = apiCall; + this.individualStemmingDictionaries = {}; + this.apiCall = apiCall; + this._stemmingDictionaries = new StemmingDictionaries(this.apiCall); + } + dictionaries(id) { + if (id === undefined) { + return this._stemmingDictionaries; + } else { + if (this.individualStemmingDictionaries[id] === undefined) { + this.individualStemmingDictionaries[id] = new StemmingDictionary( + id, + this.apiCall + ); + } + return this.individualStemmingDictionaries[id]; + } + } + static get RESOURCEPATH() { + return RESOURCEPATH21; + } +}; + +// src/Typesense/Client.ts +var Client = class { + constructor(options) { + options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false; + this.configuration = new Configuration(options); + this.apiCall = new ApiCall(this.configuration); + this.debug = new Debug(this.apiCall); + this.metrics = new Metrics(this.apiCall); + this.stats = new Metrics2(this.apiCall); + this.health = new Health(this.apiCall); + this.operations = new Operations(this.apiCall); + this.multiSearch = new MultiSearch(this.apiCall, this.configuration); + this._collections = new Collections(this.apiCall); + this.individualCollections = {}; + this._aliases = new Aliases(this.apiCall); + this.individualAliases = {}; + this._keys = new Keys(this.apiCall); + this.individualKeys = {}; + this._presets = new Presets(this.apiCall); + this.individualPresets = {}; + this._stopwords = new Stopwords(this.apiCall); + this.individualStopwords = {}; + this.analytics = new Analytics(this.apiCall); + this.stemming = new Stemming(this.apiCall); + this._conversations = new Conversations(this.apiCall); + this.individualConversations = {}; + } + collections(collectionName) { + if (collectionName === undefined) { + return this._collections; + } else { + if (this.individualCollections[collectionName] === undefined) { + this.individualCollections[collectionName] = new Collection( + collectionName, + this.apiCall, + this.configuration + ); + } + return this.individualCollections[collectionName]; + } + } + aliases(aliasName) { + if (aliasName === undefined) { + return this._aliases; + } else { + if (this.individualAliases[aliasName] === undefined) { + this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall); + } + return this.individualAliases[aliasName]; + } + } + keys(id) { + if (id === undefined) { + return this._keys; + } else { + if (this.individualKeys[id] === undefined) { + this.individualKeys[id] = new Key(id, this.apiCall); + } + return this.individualKeys[id]; + } + } + presets(id) { + if (id === undefined) { + return this._presets; + } else { + if (this.individualPresets[id] === undefined) { + this.individualPresets[id] = new Preset(id, this.apiCall); + } + return this.individualPresets[id]; + } + } + stopwords(id) { + if (id === undefined) { + return this._stopwords; + } else { + if (this.individualStopwords[id] === undefined) { + this.individualStopwords[id] = new Stopword(id, this.apiCall); + } + return this.individualStopwords[id]; + } + } + conversations(id) { + if (id === undefined) { + return this._conversations; + } else { + if (this.individualConversations[id] === undefined) { + this.individualConversations[id] = new Conversation(id, this.apiCall); + } + return this.individualConversations[id]; + } + } +}; + +exports.Client = Client; +exports.Errors = Errors_exports; +exports.SearchClient = SearchClient; +//# sourceMappingURL=typesense.min.js.map //# sourceMappingURL=typesense.min.js.map \ No newline at end of file diff --git a/dist/typesense.min.js.map b/dist/typesense.min.js.map index e6282f01..cc6d19c9 100644 --- a/dist/typesense.min.js.map +++ b/dist/typesense.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["/home/fanis/code/typesense/js-lib/dist/typesense.min.js","node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/Documents.ts","../src/Typesense/Alias.ts","../src/Typesense/StemmingDictionaries.ts","../src/Typesense/Client.ts"],"names":["require_http","__commonJSMin","exports","module","require_https","require_crypto","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","httpBody","httpStatus","importResults","payload","Configuration","options","node","logger","key","array","i","j","import_http","import_https","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted"],"mappings":"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","file":"/home/fanis/code/typesense/js-lib/dist/typesense.min.js","sourcesContent":[null,"module.exports = {}","module.exports = {}","module.exports = {}","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport type DeleteQuery =\n | {\n truncate?: true;\n }\n | {\n truncate?: never;\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n };\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n max_filter_by_candidates?: number; // default: 4\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport type { StemmingDictionaryCreateSchema } from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming/dictionaries\";\n\nexport interface StemmingDictionariesRetrieveSchema {\n dictionaries: string[];\n}\n\nexport default class StemmingDictionaries {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n id: string,\n wordRootCombinations: StemmingDictionaryCreateSchema[] | string,\n ): Promise {\n const wordRootCombinationsInJSONLFormat = Array.isArray(\n wordRootCombinations,\n )\n ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join(\"\\n\")\n : wordRootCombinations;\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: {id},\n bodyParameters: wordRootCombinationsInJSONLFormat,\n additionalHeaders: {\"Content-Type\": \"text/plain\"},\n skipConnectionTimeout: true,\n }\n );\n\n return Array.isArray(wordRootCombinations)\n ? resultsInJSONLFormat\n .split(\"\\n\")\n .map((line) => JSON.parse(line) as StemmingDictionaryCreateSchema)\n : resultsInJSONLFormat;\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return operation === undefined\n ? `${StemmingDictionaries.RESOURCEPATH}`\n : `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\nimport Stemming from \"./Stemming\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n stemming: Stemming;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this.stemming = new Stemming(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/Configuration.ts","../src/Typesense/ApiCall.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/Collections.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Utils.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/StemmingDictionaries.ts","../src/Typesense/StemmingDictionary.ts","../src/Typesense/Stemming.ts","../src/Typesense/Client.ts"],"names":["logger","axios","HTTPAgent","HTTPSAgent","RESOURCEPATH","isNodeJSEnvironment","Metrics","normalizedParams"],"mappings":"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","file":"typesense.min.js","sourcesContent":["module.exports = {}","module.exports = {}","module.exports = {}","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport type DeleteQuery =\n | {\n truncate?: true;\n }\n | {\n truncate?: never;\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n };\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n max_filter_by_candidates?: number; // default: 4\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n rerank_hybrid_matches?: boolean;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n union?: true;\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopolygon\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema\n extends Pick<\n CollectionCreateSchema,\n \"token_separators\" | \"symbols_to_index\"\n > {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName:\n | \"vote\"\n | \"snapshot\"\n | \"cache/clear\"\n | \"schema_changes\"\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters,\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport type { StemmingDictionaryCreateSchema } from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming/dictionaries\";\n\nexport interface StemmingDictionariesRetrieveSchema {\n dictionaries: string[];\n}\n\nexport default class StemmingDictionaries {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n id: string,\n wordRootCombinations: StemmingDictionaryCreateSchema[] | string,\n ): Promise {\n const wordRootCombinationsInJSONLFormat = Array.isArray(\n wordRootCombinations,\n )\n ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join(\"\\n\")\n : wordRootCombinations;\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: {id},\n bodyParameters: wordRootCombinationsInJSONLFormat,\n additionalHeaders: {\"Content-Type\": \"text/plain\"},\n skipConnectionTimeout: true,\n }\n );\n\n return Array.isArray(wordRootCombinations)\n ? resultsInJSONLFormat\n .split(\"\\n\")\n .map((line) => JSON.parse(line) as StemmingDictionaryCreateSchema)\n : resultsInJSONLFormat;\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return operation === undefined\n ? `${StemmingDictionaries.RESOURCEPATH}`\n : `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\n\nexport interface StemmingDictionaryCreateSchema {\n root: string;\n word: string;\n}\n\nexport interface StemmingDictionarySchema {\n id: string;\n words: StemmingDictionaryCreateSchema[];\n}\n\nexport default class StemmingDictionary {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import type ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\nimport StemmingDictionary from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming\";\n\nexport default class Stemming {\n private readonly _stemmingDictionaries: StemmingDictionaries;\n private readonly individualStemmingDictionaries: Record<\n string,\n StemmingDictionary\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._stemmingDictionaries = new StemmingDictionaries(this.apiCall);\n }\n\n dictionaries(): StemmingDictionaries;\n dictionaries(id: string): StemmingDictionary;\n dictionaries(id?: string): StemmingDictionaries | StemmingDictionary {\n if (id === undefined) {\n return this._stemmingDictionaries;\n } else {\n if (this.individualStemmingDictionaries[id] === undefined) {\n this.individualStemmingDictionaries[id] = new StemmingDictionary(\n id,\n this.apiCall,\n );\n }\n return this.individualStemmingDictionaries[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\nimport Stemming from \"./Stemming\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n stemming: Stemming;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this.stemming = new Stemming(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"]} \ No newline at end of file diff --git a/dist/typesense.min.mjs b/dist/typesense.min.mjs index 95faae63..b17ac3cb 100644 --- a/dist/typesense.min.mjs +++ b/dist/typesense.min.mjs @@ -1,11 +1,1774 @@ -var Fe=Object.create;var Ce=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,Je=Object.prototype.hasOwnProperty;var Se=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Qe=(r,e)=>{for(var t in e)Ce(r,t,{get:e[t],enumerable:!0})},Be=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ze(e))!Je.call(r,n)&&n!==t&&Ce(r,n,{get:()=>e[n],enumerable:!(i=je(e,n))||i.enumerable});return r};var ve=(r,e,t)=>(t=r!=null?Fe(Le(r)):{},Be(e||!r||!r.__esModule?Ce(t,"default",{value:r,enumerable:!0}):t,r));var Te=Se((Bt,be)=>{"use strict";be.exports={}});var we=Se((Vt,Ee)=>{"use strict";Ee.exports={}});var ke=Se((ti,Ie)=>{"use strict";Ie.exports={}});import Ve from"loglevel";var _e={};Qe(_e,{HTTPError:()=>R,ImportError:()=>y,MissingConfigurationError:()=>g,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>f,ObjectUnprocessable:()=>A,RequestMalformed:()=>_,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype)}};var R=class extends l{};var g=class extends l{};var x=class extends l{};var f=class extends l{};var A=class extends l{};var _=class extends l{};var b=class extends l{};var T=class extends l{};var y=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=!0),e.randomizeNodes===!0&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==void 0&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||!1,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||Ve,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate()}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new g("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new g("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new g("Ensure that apiKey is set");return!0}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return!["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case"https":e.port=443;break;case"http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12")}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}};var De=ve(Te()),Ne=ve(we());import he from"axios";var Ye="X-TYPESENSE-API-KEY",Pe=!0,Ge=!1,Oe=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1}async get(e,t={},{abortSignal:i=null,responseType:n=void 0}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:n})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},n={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:n})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?he.getAdapter(this.configuration.axiosAdapter).bind(globalThis):he.getAdapter(this.configuration.axiosAdapter):void 0}async performRequest(e,t,{queryParameters:i=null,bodyParameters:n=null,additionalHeaders:s={},abortSignal:a=null,responseType:h=void 0,skipConnectionTimeout:m=!1,enableKeepAlive:C=void 0}){this.configuration.validate();let c=Date.now(),S,j=!1;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),s,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:z=>z>0,transformResponse:[(z,L)=>{let Ae=z;return L!==void 0&&typeof z=="string"&&L["content-type"]&&L["content-type"].startsWith("application/json")&&(Ae=JSON.parse(z)),Ae}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Oe?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new De.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Oe?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new Ne.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),n&&(typeof n=="string"&&n.length!==0||typeof n=="object"&&Object.keys(n).length!==0)&&(o.data=n),a){let L=he.CancelToken.source();Q=()=>{j=!0,L.cancel()},a.addEventListener("abort",Q),o.cancelToken=L.token}let d=await he(o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Pe),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,d.data?.message,o.data));throw this.customErrorForResponse(d,d.data?.message,o.data)}catch(o){if(j||this.setNodeHealthcheck(P,Ge),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${o?.code??""} ${o.message}${o.response==null?"":" - "+JSON.stringify(o.response?.data)}"`),j)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===!0?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===!0||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Pe)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Pe)})}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now()}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ye]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let n=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(n+=` | Server said: ${t}`);let s=new l(n,i,e.status);return e.status===400?s=new _(n):e.status===401?s=new b(n):e.status===404?s=new f(n):e.status===409?s=new x(n):e.status===422?s=new A(n):e.status>=500&&e.status<=599?s=new T(n):s=new R(n),s}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map}async perform(e,t,i,n){let{cacheResponseForSeconds:s=120,maxSize:a=100}=n;if(s<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o)}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o)}return v}};var Re="/collections",p=class{constructor(e){this.apiCall=e}async create(e,t={}){return this.apiCall.post(Re,e,t)}async retrieve(e={}){return this.apiCall.get(Re,e)}static get RESOURCEPATH(){return Re}};var Ue="/documents",J=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let n={};this.configuration.useServerSideSearchCache===!0&&(n.use_cache=!0);let s=u(e),a=Object.assign({},n,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${Ue}${e===void 0?"":"/"+e}`}static get RESOURCEPATH(){return Ue}};var xe={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},He=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,D=class extends J{constructor(e,t,i){super(e,t,i)}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(s=>JSON.stringify(s)).join(` -`)}catch(s){throw s instanceof RangeError&&s.message.includes("Too many properties to enumerate")?new Error(`${s} +import logger from 'loglevel'; +import axios from 'axios'; + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// node-modules-polyfills-empty:http +var require_http = __commonJS({ + "node-modules-polyfills-empty:http"(exports, module) { + module.exports = {}; + } +}); + +// node-modules-polyfills-empty:https +var require_https = __commonJS({ + "node-modules-polyfills-empty:https"(exports, module) { + module.exports = {}; + } +}); + +// node-modules-polyfills-empty:crypto +var require_crypto = __commonJS({ + "node-modules-polyfills-empty:crypto"(exports, module) { + module.exports = {}; + } +}); + +// src/Typesense/Errors/index.ts +var Errors_exports = {}; +__export(Errors_exports, { + HTTPError: () => HTTPError, + ImportError: () => ImportError, + MissingConfigurationError: () => MissingConfigurationError, + ObjectAlreadyExists: () => ObjectAlreadyExists, + ObjectNotFound: () => ObjectNotFound, + ObjectUnprocessable: () => ObjectUnprocessable, + RequestMalformed: () => RequestMalformed, + RequestUnauthorized: () => RequestUnauthorized, + ServerError: () => ServerError, + TypesenseError: () => TypesenseError +}); + +// src/Typesense/Errors/TypesenseError.ts +var TypesenseError = class extends Error { + // Source: https://stackoverflow.com/a/58417721/123545 + constructor(message, httpBody, httpStatus) { + super(message); + this.name = new.target.name; + this.httpBody = httpBody; + this.httpStatus = httpStatus; + Object.setPrototypeOf(this, new.target.prototype); + } +}; + +// src/Typesense/Errors/HTTPError.ts +var HTTPError = class extends TypesenseError { +}; + +// src/Typesense/Errors/MissingConfigurationError.ts +var MissingConfigurationError = class extends TypesenseError { +}; + +// src/Typesense/Errors/ObjectAlreadyExists.ts +var ObjectAlreadyExists = class extends TypesenseError { +}; + +// src/Typesense/Errors/ObjectNotFound.ts +var ObjectNotFound = class extends TypesenseError { +}; + +// src/Typesense/Errors/ObjectUnprocessable.ts +var ObjectUnprocessable = class extends TypesenseError { +}; + +// src/Typesense/Errors/RequestMalformed.ts +var RequestMalformed = class extends TypesenseError { +}; + +// src/Typesense/Errors/RequestUnauthorized.ts +var RequestUnauthorized = class extends TypesenseError { +}; + +// src/Typesense/Errors/ServerError.ts +var ServerError = class extends TypesenseError { +}; + +// src/Typesense/Errors/ImportError.ts +var ImportError = class extends TypesenseError { + constructor(message, importResults, payload) { + super(message); + this.importResults = importResults; + this.payload = payload; + } +}; + +// src/Typesense/Configuration.ts +var Configuration = class { + constructor(options) { + this.nodes = options.nodes || []; + this.nodes = this.nodes.map((node) => this.setDefaultPathInNode(node)).map((node) => this.setDefaultPortInNode(node)).map((node) => ({ ...node })); + if (options.randomizeNodes == null) { + options.randomizeNodes = true; + } + if (options.randomizeNodes === true) { + this.shuffleArray(this.nodes); + } + this.nearestNode = options.nearestNode; + this.nearestNode = this.setDefaultPathInNode(this.nearestNode); + this.nearestNode = this.setDefaultPortInNode(this.nearestNode); + this.connectionTimeoutSeconds = options.connectionTimeoutSeconds || options.timeoutSeconds || 5; + this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60; + this.numRetries = (options.numRetries !== undefined && options.numRetries >= 0 ? options.numRetries : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; + this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1; + this.apiKey = options.apiKey; + this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; + this.cacheSearchResultsForSeconds = options.cacheSearchResultsForSeconds || 0; + this.useServerSideSearchCache = options.useServerSideSearchCache || false; + this.axiosAdapter = options.axiosAdapter; + this.logger = options.logger || logger; + this.logLevel = options.logLevel || "warn"; + this.logger.setLevel(this.logLevel); + this.additionalHeaders = options.additionalHeaders; + this.httpAgent = options.httpAgent; + this.httpsAgent = options.httpsAgent; + this.paramsSerializer = options.paramsSerializer; + this.showDeprecationWarnings(options); + this.validate(); + } + validate() { + if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) { + throw new MissingConfigurationError( + "Ensure that nodes[].protocol, nodes[].host and nodes[].port are set" + ); + } + if (this.nearestNode != null && this.isNodeMissingAnyParameters(this.nearestNode)) { + throw new MissingConfigurationError( + "Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set" + ); + } + if (this.apiKey == null) { + throw new MissingConfigurationError("Ensure that apiKey is set"); + } + return true; + } + validateNodes() { + return this.nodes.some((node) => { + return this.isNodeMissingAnyParameters(node); + }); + } + isNodeMissingAnyParameters(node) { + return !["protocol", "host", "port", "path"].every((key) => { + return node.hasOwnProperty(key); + }) && node["url"] == null; + } + setDefaultPathInNode(node) { + if (node != null && !node.hasOwnProperty("path")) { + node["path"] = ""; + } + return node; + } + setDefaultPortInNode(node) { + if (node != null && !node.hasOwnProperty("port") && node.hasOwnProperty("protocol")) { + switch (node["protocol"]) { + case "https": + node["port"] = 443; + break; + case "http": + node["port"] = 80; + break; + } + } + return node; + } + showDeprecationWarnings(options) { + if (options.timeoutSeconds) { + this.logger.warn( + "Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds" + ); + } + if (options.masterNode) { + this.logger.warn( + "Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12" + ); + } + if (options.readReplicaNodes) { + this.logger.warn( + "Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12" + ); + } + } + shuffleArray(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } + } +}; + +// src/Typesense/ApiCall.ts +var import_http = __toESM(require_http()); +var import_https = __toESM(require_https()); +var APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; +var HEALTHY = true; +var UNHEALTHY = false; +var isNodeJSEnvironment = typeof process !== "undefined" && process.versions != null && process.versions.node != null; +var ApiCall = class { + constructor(configuration) { + this.configuration = configuration; + this.apiKey = this.configuration.apiKey; + this.nodes = this.configuration.nodes == null ? this.configuration.nodes : JSON.parse(JSON.stringify(this.configuration.nodes)); + this.nearestNode = this.configuration.nearestNode == null ? this.configuration.nearestNode : JSON.parse(JSON.stringify(this.configuration.nearestNode)); + this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds; + this.healthcheckIntervalSeconds = this.configuration.healthcheckIntervalSeconds; + this.numRetriesPerRequest = this.configuration.numRetries; + this.retryIntervalSeconds = this.configuration.retryIntervalSeconds; + this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam; + this.additionalUserHeaders = this.configuration.additionalHeaders; + this.logger = this.configuration.logger; + this.initializeMetadataForNodes(); + this.currentNodeIndex = -1; + } + async get(endpoint, queryParameters = {}, { + abortSignal = null, + responseType = undefined + } = {}) { + return this.performRequest("get", endpoint, { + queryParameters, + abortSignal, + responseType + }); + } + async delete(endpoint, queryParameters = {}) { + return this.performRequest("delete", endpoint, { queryParameters }); + } + async post(endpoint, bodyParameters = {}, queryParameters = {}, additionalHeaders = {}) { + return this.performRequest("post", endpoint, { + queryParameters, + bodyParameters, + additionalHeaders + }); + } + async put(endpoint, bodyParameters = {}, queryParameters = {}) { + return this.performRequest("put", endpoint, { + queryParameters, + bodyParameters + }); + } + async patch(endpoint, bodyParameters = {}, queryParameters = {}) { + return this.performRequest("patch", endpoint, { + queryParameters, + bodyParameters + }); + } + getAdapter() { + if (!this.configuration.axiosAdapter) return undefined; + if (typeof this.configuration.axiosAdapter === "function") + return this.configuration.axiosAdapter; + const isCloudflareWorkers = typeof navigator !== "undefined" && navigator.userAgent === "Cloudflare-Workers"; + return isCloudflareWorkers ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis) : axios.getAdapter(this.configuration.axiosAdapter); + } + async performRequest(requestType, endpoint, { + queryParameters = null, + bodyParameters = null, + additionalHeaders = {}, + abortSignal = null, + responseType = undefined, + skipConnectionTimeout = false, + enableKeepAlive = undefined + }) { + this.configuration.validate(); + const requestNumber = Date.now(); + let lastException; + let wasAborted = false; + this.logger.debug( + `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}` + ); + for (let numTries = 1; numTries <= this.numRetriesPerRequest + 1; numTries++) { + const node = this.getNextNode(requestNumber); + this.logger.debug( + `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${node.index}` + ); + if (abortSignal && abortSignal.aborted) { + return Promise.reject(new Error("Request aborted by caller.")); + } + let abortListener; + try { + const requestOptions = { + adapter: this.getAdapter(), + method: requestType, + url: this.uriFor(endpoint, node), + headers: Object.assign( + {}, + this.defaultHeaders(), + additionalHeaders, + this.additionalUserHeaders + ), + maxContentLength: Infinity, + maxBodyLength: Infinity, + responseType, + validateStatus: (status) => { + return status > 0; + }, + transformResponse: [ + (data, headers) => { + let transformedData = data; + if (headers !== void 0 && typeof data === "string" && headers["content-type"] && headers["content-type"].startsWith("application/json")) { + transformedData = JSON.parse(data); + } + return transformedData; + } + ] + }; + if (skipConnectionTimeout !== true) { + requestOptions.timeout = this.connectionTimeoutSeconds * 1e3; + } + if (queryParameters && Object.keys(queryParameters).length !== 0) { + requestOptions.params = queryParameters; + } + if (this.sendApiKeyAsQueryParam) { + requestOptions.params = requestOptions.params || {}; + requestOptions.params["x-typesense-api-key"] = this.apiKey; + } + if (this.configuration.httpAgent) { + this.logger.debug( + `Request #${requestNumber}: Using custom httpAgent` + ); + requestOptions.httpAgent = this.configuration.httpAgent; + } else if (enableKeepAlive === true) { + if (!isNodeJSEnvironment) { + this.logger.warn( + `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive` + ); + } else { + this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`); + requestOptions.httpAgent = new import_http.Agent({ keepAlive: true }); + } + } + if (this.configuration.httpsAgent) { + this.logger.debug( + `Request #${requestNumber}: Using custom httpsAgent` + ); + requestOptions.httpsAgent = this.configuration.httpsAgent; + } else if (enableKeepAlive === true) { + if (!isNodeJSEnvironment) { + this.logger.warn( + `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive` + ); + } else { + this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`); + requestOptions.httpsAgent = new import_https.Agent({ keepAlive: true }); + } + } + if (this.configuration.paramsSerializer) { + this.logger.debug( + `Request #${requestNumber}: Using custom paramsSerializer` + ); + requestOptions.paramsSerializer = this.configuration.paramsSerializer; + } + if (bodyParameters && (typeof bodyParameters === "string" && bodyParameters.length !== 0 || typeof bodyParameters === "object" && Object.keys(bodyParameters).length !== 0)) { + requestOptions.data = bodyParameters; + } + if (abortSignal) { + const cancelToken = axios.CancelToken; + const source = cancelToken.source(); + abortListener = () => { + wasAborted = true; + source.cancel(); + }; + abortSignal.addEventListener("abort", abortListener); + requestOptions.cancelToken = source.token; + } + const response = await axios(requestOptions); + if (response.status >= 1 && response.status <= 499) { + this.setNodeHealthcheck(node, HEALTHY); + } + this.logger.debug( + `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.` + ); + if (response.status >= 200 && response.status < 300) { + return Promise.resolve(response.data); + } else if (response.status < 500) { + return Promise.reject( + this.customErrorForResponse( + response, + response.data?.message, + requestOptions.data + ) + ); + } else { + throw this.customErrorForResponse( + response, + response.data?.message, + requestOptions.data + ); + } + } catch (error) { + if (!wasAborted) { + this.setNodeHealthcheck(node, UNHEALTHY); + } + lastException = error; + this.logger.warn( + `Request #${requestNumber}: Request to Node ${node.index} failed due to "${error?.code ?? ""} ${error.message}${error.response == null ? "" : " - " + JSON.stringify(error.response?.data)}"` + ); + if (wasAborted) { + return Promise.reject(new Error("Request aborted by caller.")); + } + if (numTries < this.numRetriesPerRequest + 1) { + this.logger.warn( + `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...` + ); + } + await this.timer(this.retryIntervalSeconds); + } finally { + if (abortSignal && abortListener) { + abortSignal.removeEventListener("abort", abortListener); + } + } + } + this.logger.debug( + `Request #${requestNumber}: No retries left. Raising last error` + ); + return Promise.reject(lastException); + } + // Attempts to find the next healthy node, looping through the list of nodes once. + // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy + // so we can try the request for good measure, in case that node has become healthy since + getNextNode(requestNumber = 0) { + if (this.nearestNode != null) { + this.logger.debug( + `Request #${requestNumber}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy === true ? "Healthy" : "Unhealthy"}` + ); + if (this.nearestNode.isHealthy === true || this.nodeDueForHealthcheck(this.nearestNode, requestNumber)) { + this.logger.debug( + `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}` + ); + return this.nearestNode; + } + this.logger.debug( + `Request #${requestNumber}: Falling back to individual nodes` + ); + } + this.logger.debug( + `Request #${requestNumber}: Nodes Health: ${this.nodes.map( + (node) => `Node ${node.index} is ${node.isHealthy === true ? "Healthy" : "Unhealthy"}` + ).join(" || ")}` + ); + let candidateNode = this.nodes[0]; + for (let i = 0; i <= this.nodes.length; i++) { + this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length; + candidateNode = this.nodes[this.currentNodeIndex]; + if (candidateNode.isHealthy === true || this.nodeDueForHealthcheck(candidateNode, requestNumber)) { + this.logger.debug( + `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}` + ); + return candidateNode; + } + } + this.logger.debug( + `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}` + ); + return candidateNode; + } + nodeDueForHealthcheck(node, requestNumber = 0) { + const isDueForHealthcheck = Date.now() - node.lastAccessTimestamp > this.healthcheckIntervalSeconds * 1e3; + if (isDueForHealthcheck) { + this.logger.debug( + `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.` + ); + } + return isDueForHealthcheck; + } + initializeMetadataForNodes() { + if (this.nearestNode != null) { + this.nearestNode.index = "nearestNode"; + this.setNodeHealthcheck(this.nearestNode, HEALTHY); + } + this.nodes.forEach((node, i) => { + node.index = i; + this.setNodeHealthcheck(node, HEALTHY); + }); + } + setNodeHealthcheck(node, isHealthy) { + node.isHealthy = isHealthy; + node.lastAccessTimestamp = Date.now(); + } + uriFor(endpoint, node) { + if (node.url != null) { + return `${node.url}${endpoint}`; + } + return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`; + } + defaultHeaders() { + const defaultHeaders = {}; + if (!this.sendApiKeyAsQueryParam) { + defaultHeaders[APIKEYHEADERNAME] = this.apiKey; + } + defaultHeaders["Content-Type"] = "application/json"; + return defaultHeaders; + } + async timer(seconds) { + return new Promise((resolve) => setTimeout(resolve, seconds * 1e3)); + } + customErrorForResponse(response, messageFromServer, httpBody) { + let errorMessage = `Request failed with HTTP code ${response.status}`; + if (typeof messageFromServer === "string" && messageFromServer.trim() !== "") { + errorMessage += ` | Server said: ${messageFromServer}`; + } + let error = new TypesenseError(errorMessage, httpBody, response.status); + if (response.status === 400) { + error = new RequestMalformed(errorMessage); + } else if (response.status === 401) { + error = new RequestUnauthorized(errorMessage); + } else if (response.status === 404) { + error = new ObjectNotFound(errorMessage); + } else if (response.status === 409) { + error = new ObjectAlreadyExists(errorMessage); + } else if (response.status === 422) { + error = new ObjectUnprocessable(errorMessage); + } else if (response.status >= 500 && response.status <= 599) { + error = new ServerError(errorMessage); + } else { + error = new HTTPError(errorMessage); + } + return error; + } +}; + +// src/Typesense/RequestWithCache.ts +var defaultCacheResponseForSeconds = 2 * 60; +var defaultMaxSize = 100; +var RequestWithCache = class { + constructor() { + this.responseCache = /* @__PURE__ */ new Map(); + this.responsePromiseCache = /* @__PURE__ */ new Map(); + } + clearCache() { + this.responseCache = /* @__PURE__ */ new Map(); + this.responsePromiseCache = /* @__PURE__ */ new Map(); + } + // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way + async perform(requestContext, requestFunction, requestFunctionArguments, cacheOptions) { + const { + cacheResponseForSeconds = defaultCacheResponseForSeconds, + maxSize = defaultMaxSize + } = cacheOptions; + const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0; + if (isCacheDisabled) { + return requestFunction.call(requestContext, ...requestFunctionArguments); + } + const requestFunctionArgumentsJSON = JSON.stringify( + requestFunctionArguments + ); + const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON); + const now = Date.now(); + if (cacheEntry) { + const isEntryValid = now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1e3; + if (isEntryValid) { + this.responseCache.delete(requestFunctionArgumentsJSON); + this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry); + return Promise.resolve(cacheEntry.response); + } else { + this.responseCache.delete(requestFunctionArgumentsJSON); + } + } + const cachePromiseEntry = this.responsePromiseCache.get( + requestFunctionArgumentsJSON + ); + if (cachePromiseEntry) { + const isEntryValid = now - cachePromiseEntry.requestTimestamp < cacheResponseForSeconds * 1e3; + if (isEntryValid) { + this.responsePromiseCache.delete(requestFunctionArgumentsJSON); + this.responsePromiseCache.set( + requestFunctionArgumentsJSON, + cachePromiseEntry + ); + return cachePromiseEntry.responsePromise; + } else { + this.responsePromiseCache.delete(requestFunctionArgumentsJSON); + } + } + const responsePromise = requestFunction.call( + requestContext, + ...requestFunctionArguments + ); + this.responsePromiseCache.set(requestFunctionArgumentsJSON, { + requestTimestamp: now, + responsePromise + }); + const response = await responsePromise; + this.responseCache.set(requestFunctionArgumentsJSON, { + requestTimestamp: now, + response + }); + const isCacheOverMaxSize = this.responseCache.size > maxSize; + if (isCacheOverMaxSize) { + const oldestEntry = this.responseCache.keys().next().value; + if (oldestEntry) { + this.responseCache.delete(oldestEntry); + } + } + const isResponsePromiseCacheOverMaxSize = this.responsePromiseCache.size > maxSize; + if (isResponsePromiseCacheOverMaxSize) { + const oldestEntry = this.responsePromiseCache.keys().next().value; + if (oldestEntry) { + this.responsePromiseCache.delete(oldestEntry); + } + } + return response; + } +}; + +// src/Typesense/Collections.ts +var RESOURCEPATH = "/collections"; +var Collections = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async create(schema, options = {}) { + return this.apiCall.post(RESOURCEPATH, schema, options); + } + async retrieve(options = {}) { + return this.apiCall.get(RESOURCEPATH, options); + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +}; + +// src/Typesense/SearchOnlyDocuments.ts +var RESOURCEPATH2 = "/documents"; +var SearchOnlyDocuments = class { + constructor(collectionName, apiCall, configuration) { + this.collectionName = collectionName; + this.apiCall = apiCall; + this.configuration = configuration; + this.requestWithCache = new RequestWithCache(); + } + clearCache() { + this.requestWithCache.clearCache(); + } + async search(searchParameters, { + cacheSearchResultsForSeconds = this.configuration.cacheSearchResultsForSeconds, + abortSignal = null + } = {}) { + const additionalQueryParams = {}; + if (this.configuration.useServerSideSearchCache === true) { + additionalQueryParams["use_cache"] = true; + } + const normalizedParams = normalizeArrayableParams(searchParameters); + const queryParams = Object.assign( + {}, + additionalQueryParams, + normalizedParams + ); + return this.requestWithCache.perform( + this.apiCall, + this.apiCall.get, + [this.endpointPath("search"), queryParams, { abortSignal }], + { + cacheResponseForSeconds: cacheSearchResultsForSeconds + } + ); + } + endpointPath(operation) { + return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH2}${operation === undefined ? "" : "/" + operation}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH2; + } +}; + +// src/Typesense/Documents.ts +var arrayableParams = { + query_by: "query_by", + query_by_weights: "query_by_weights", + facet_by: "facet_by", + group_by: "group_by", + include_fields: "include_fields", + exclude_fields: "exclude_fields", + highlight_fields: "highlight_fields", + highlight_full_fields: "highlight_full_fields", + pinned_hits: "pinned_hits", + hidden_hits: "hidden_hits", + infix: "infix", + override_tags: "override_tags", + num_typos: "num_typos", + prefix: "prefix", + sort_by: "sort_by" +}; +var isNodeJSEnvironment2 = typeof process !== "undefined" && process.versions != null && process.versions.node != null; +var Documents = class extends SearchOnlyDocuments { + constructor(collectionName, apiCall, configuration) { + super(collectionName, apiCall, configuration); + } + async create(document, options = {}) { + if (!document) throw new Error("No document provided"); + return this.apiCall.post(this.endpointPath(), document, options); + } + async upsert(document, options = {}) { + if (!document) throw new Error("No document provided"); + return this.apiCall.post( + this.endpointPath(), + document, + Object.assign({}, options, { action: "upsert" }) + ); + } + async update(document, options = {}) { + if (!document) throw new Error("No document provided"); + if (options["filter_by"] != null) { + return this.apiCall.patch( + this.endpointPath(), + document, + Object.assign({}, options) + ); + } else { + return this.apiCall.post( + this.endpointPath(), + document, + Object.assign({}, options, { action: "update" }) + ); + } + } + async delete(query = {}) { + return this.apiCall.delete(this.endpointPath(), query); + } + async createMany(documents, options = {}) { + this.configuration.logger.warn( + "createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents" + ); + return this.import(documents, options); + } + async import(documents, options = {}) { + let documentsInJSONLFormat; + if (Array.isArray(documents)) { + try { + documentsInJSONLFormat = documents.map((document) => JSON.stringify(document)).join("\n"); + } catch (error) { + if (error instanceof RangeError && error.message.includes("Too many properties to enumerate")) { + throw new Error(`${error} It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object Please try reducing the number of keys in your document, or using CURL to import your data. - `):new Error(s)}else i=e;let n=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!He});if(Array.isArray(e)){let s=n.split(` -`).map(h=>JSON.parse(h)),a=s.filter(h=>h.success===!1);if(a.length>0)throw new y(`${s.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:s.length-a.length});return s}else return n}async importStream(e,t={}){let n=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0,enableKeepAlive:!!He})).split(` -`).map(a=>JSON.parse(a)),s=n.filter(a=>a.success===!1);if(s.length>0)throw new y(`${n.length-s.length} documents imported successfully, ${s.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:e,options:t,failedItems:s,successCount:n.length-s.length});return n}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function $e(r){return Object.keys(xe).filter(e=>r[e]!==void 0).every(e=>Xe(r[e]))}function u(r){let e={...r};if(!Object.keys(xe).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&$e(e))return e;if(!$e(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Xe(r){return!Array.isArray(r)}var Ze="/multi_search",N=class{constructor(e,t,i=!1){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O}clearCache(){this.requestWithCache.clearCache()}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let n={};this.useTextContentType&&(n["content-type"]="text/plain");let s={};this.configuration.useServerSideSearchCache===!0&&(s.use_cache=!0);let a={...t,...s},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ze,h,m,n],{cacheResponseForSeconds:i})}};var ue=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new J(this.name,this.apiCall,this.configuration)}documents(){return this._documents}};var ge=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!0,e.sendApiKeyAsQueryParam===!0&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=!1),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new N(this.apiCall,this.configuration,!0),this.individualCollections={}}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache()})}collections(e){if(e)return this.individualCollections[e]===void 0&&(this.individualCollections[e]=new ue(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var et="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return et}};var B=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var tt="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return tt}};var V=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var fe=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${D.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var Y=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new D(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall)}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof f)return!1;throw e}}documents(e){return e?(this.individualDocuments[e]===void 0&&(this.individualDocuments[e]=new fe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===void 0?this._overrides:(this.individualOverrides[e]===void 0&&(this.individualOverrides[e]=new B(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===void 0?this._synonyms:(this.individualSynonyms[e]===void 0&&(this.individualSynonyms[e]=new V(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return`${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var qe="/aliases",$=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(qe)}endpointPath(e){return`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Me=ve(ke());var Ke="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Ke)}generateScopedSearchKey(e,t){let i=u(t),n=JSON.stringify(i),s=Buffer.from((0,Me.createHmac)("sha256",e).update(n).digest("base64")),a=e.substr(0,4),h=`${s}${a}${n}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return Ke}};var X=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var rt="/debug",Z=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(rt)}};var it="/metrics.json",ee=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(it)}};var nt="/stats.json",te=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(nt)}};var st="/health",re=class{constructor(e){this.apiCall=e}async retrieve(){return this.apiCall.get(st)}};var ot="/operations",ie=class{constructor(e){this.apiCall=e}async perform(e,t={}){return this.apiCall.post(`${ot}/${e}`,{},t)}};var at="/presets",I=class r{constructor(e){this.apiCall=e}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let n=t.value.searches.map(s=>u(s));return this.apiCall.put(this.endpointPath(e),{value:{searches:n}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return at}};var ne=class{constructor(e,t){this.presetId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var lt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ct="/analytics/events",oe=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var pt="/analytics",ae=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new oe(this.apiCall)}rules(e){return e===void 0?this._analyticsRules:(this.individualAnalyticsRules[e]===void 0&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return pt}};var mt="/stopwords",K=class r{constructor(e){this.apiCall=e}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return mt}};var le=class{constructor(e,t){this.stopwordId=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var dt="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return`${r.RESOURCEPATH}${e===void 0?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return dt}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var We="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall)}async retrieve(){return this.apiCall.get(We)}models(e){return e===void 0?this._conversationsModels:(this.individualConversationModels[e]===void 0&&(this.individualConversationModels[e]=new ce(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return We}};var pe=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return`${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ht="/stemming/dictionaries",F=class r{constructor(e){this.apiCall=e;this.apiCall=e}async upsert(e,t){let i=Array.isArray(t)?t.map(s=>JSON.stringify(s)).join(` -`):t,n=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:{id:e},bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:!0});return Array.isArray(t)?n.split(` -`).map(s=>JSON.parse(s)):n}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return e===void 0?`${r.RESOURCEPATH}`:`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return ht}};var me=class{constructor(e,t){this.id=e;this.apiCall=t}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(){return`${F.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ut="/stemming",de=class{constructor(e){this.apiCall=e;this.individualStemmingDictionaries={};this.apiCall=e,this._stemmingDictionaries=new F(this.apiCall)}dictionaries(e){return e===void 0?this._stemmingDictionaries:(this.individualStemmingDictionaries[e]===void 0&&(this.individualStemmingDictionaries[e]=new me(e,this.apiCall)),this.individualStemmingDictionaries[e])}static get RESOURCEPATH(){return ut}};var ye=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??!1,this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new Z(this.apiCall),this.metrics=new ee(this.apiCall),this.stats=new te(this.apiCall),this.health=new re(this.apiCall),this.operations=new ie(this.apiCall),this.multiSearch=new N(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new ae(this.apiCall),this.stemming=new de(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={}}collections(e){return e===void 0?this._collections:(this.individualCollections[e]===void 0&&(this.individualCollections[e]=new Y(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===void 0?this._aliases:(this.individualAliases[e]===void 0&&(this.individualAliases[e]=new G(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===void 0?this._keys:(this.individualKeys[e]===void 0&&(this.individualKeys[e]=new X(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===void 0?this._presets:(this.individualPresets[e]===void 0&&(this.individualPresets[e]=new ne(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===void 0?this._stopwords:(this.individualStopwords[e]===void 0&&(this.individualStopwords[e]=new le(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===void 0?this._conversations:(this.individualConversations[e]===void 0&&(this.individualConversations[e]=new pe(e,this.apiCall)),this.individualConversations[e])}};export{ye as Client,_e as Errors,ge as SearchClient}; + `); + } + throw new Error(error); + } + } else { + documentsInJSONLFormat = documents; + } + const resultsInJSONLFormat = await this.apiCall.performRequest( + "post", + this.endpointPath("import"), + { + queryParameters: options, + bodyParameters: documentsInJSONLFormat, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, + // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully + enableKeepAlive: isNodeJSEnvironment2 ? true : false + // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 + } + ); + if (Array.isArray(documents)) { + const resultsInJSONFormat = resultsInJSONLFormat.split("\n").map((r) => JSON.parse(r)); + const failedItems = resultsInJSONFormat.filter( + (r) => r.success === false + ); + if (failedItems.length > 0) { + throw new ImportError( + `${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, + resultsInJSONFormat, + { + documentsInJSONLFormat, + options, + failedItems, + successCount: resultsInJSONFormat.length - failedItems.length + } + ); + } else { + return resultsInJSONFormat; + } + } else { + return resultsInJSONLFormat; + } + } + /** + * Imports documents from a NodeJS readable stream of JSONL. + */ + async importStream(readableStream, options = {}) { + const resultsInJSONLFormat = await this.apiCall.performRequest( + "post", + this.endpointPath("import"), + { + queryParameters: options, + bodyParameters: readableStream, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, + // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully + enableKeepAlive: isNodeJSEnvironment2 ? true : false + // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 + } + ); + const resultsInJSONFormat = resultsInJSONLFormat.split("\n").map((r) => JSON.parse(r)); + const failedItems = resultsInJSONFormat.filter((r) => r.success === false); + if (failedItems.length > 0) { + throw new ImportError( + `${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, + resultsInJSONFormat, + { + documentsInJSONLFormat: readableStream, + options, + failedItems, + successCount: resultsInJSONFormat.length - failedItems.length + } + ); + } else { + return resultsInJSONFormat; + } + } + /** + * Returns a JSONL string for all the documents in this collection + */ + async export(options = {}) { + return this.apiCall.get(this.endpointPath("export"), options); + } + /** + * Returns a NodeJS readable stream of JSONL for all the documents in this collection. + */ + async exportStream(options = {}) { + return this.apiCall.get(this.endpointPath("export"), options, { + responseType: "stream" + }); + } +}; + +// src/Typesense/Utils.ts +function hasNoArrayValues(params) { + return Object.keys(arrayableParams).filter((key) => params[key] !== undefined).every((key) => isNonArrayValue(params[key])); +} +function normalizeArrayableParams(params) { + const result = { ...params }; + const transformedValues = Object.keys(arrayableParams).filter((key) => Array.isArray(result[key])).map((key) => { + result[key] = result[key].join(","); + return key; + }); + if (!transformedValues.length && hasNoArrayValues(result)) { + return result; + } + if (!hasNoArrayValues(result)) { + throw new Error( + `Failed to normalize arrayable params: ${JSON.stringify(result)}` + ); + } + return result; +} +function isNonArrayValue(value) { + return !Array.isArray(value); +} + +// src/Typesense/MultiSearch.ts +var RESOURCEPATH3 = "/multi_search"; +var MultiSearch = class { + constructor(apiCall, configuration, useTextContentType = false) { + this.apiCall = apiCall; + this.configuration = configuration; + this.useTextContentType = useTextContentType; + this.requestWithCache = new RequestWithCache(); + } + clearCache() { + this.requestWithCache.clearCache(); + } + async perform(searchRequests, commonParams = {}, { + cacheSearchResultsForSeconds = this.configuration.cacheSearchResultsForSeconds + } = {}) { + const additionalHeaders = {}; + if (this.useTextContentType) { + additionalHeaders["content-type"] = "text/plain"; + } + const additionalQueryParams = {}; + if (this.configuration.useServerSideSearchCache === true) { + additionalQueryParams["use_cache"] = true; + } + const queryParams = { ...commonParams, ...additionalQueryParams }; + const normalizedSearchRequests = { + searches: searchRequests.searches.map(normalizeArrayableParams) + }; + const normalizedQueryParams = normalizeArrayableParams(queryParams); + return this.requestWithCache.perform( + this.apiCall, + this.apiCall.post, + [ + RESOURCEPATH3, + normalizedSearchRequests, + normalizedQueryParams, + additionalHeaders + ], + { cacheResponseForSeconds: cacheSearchResultsForSeconds } + ); + } +}; + +// src/Typesense/SearchOnlyCollection.ts +var SearchOnlyCollection = class { + constructor(name, apiCall, configuration) { + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this._documents = new SearchOnlyDocuments( + this.name, + this.apiCall, + this.configuration + ); + } + documents() { + return this._documents; + } +}; + +// src/Typesense/SearchClient.ts +var SearchClient = class { + constructor(options) { + options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true; + if (options.sendApiKeyAsQueryParam === true && (options.apiKey || "").length > 2e3) { + console.warn( + "[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter." + ); + options.sendApiKeyAsQueryParam = false; + } + this.configuration = new Configuration(options); + this.apiCall = new ApiCall(this.configuration); + this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true); + this.individualCollections = {}; + } + clearCache() { + this.multiSearch.clearCache(); + Object.entries(this.individualCollections).forEach(([_, collection]) => { + collection.documents().clearCache(); + }); + } + collections(collectionName) { + if (!collectionName) { + throw new Error( + "Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object." + ); + } else { + if (this.individualCollections[collectionName] === undefined) { + this.individualCollections[collectionName] = new SearchOnlyCollection( + collectionName, + this.apiCall, + this.configuration + ); + } + return this.individualCollections[collectionName]; + } + } +}; + +// src/Typesense/Overrides.ts +var RESOURCEPATH4 = "/overrides"; +var Overrides = class _Overrides { + constructor(collectionName, apiCall) { + this.collectionName = collectionName; + this.apiCall = apiCall; + } + async upsert(overrideId, params) { + return this.apiCall.put( + this.endpointPath(overrideId), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${Collections.RESOURCEPATH}/${this.collectionName}${_Overrides.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH4; + } +}; + +// src/Typesense/Override.ts +var Override = class { + constructor(collectionName, overrideId, apiCall) { + this.collectionName = collectionName; + this.overrideId = overrideId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`; + } +}; + +// src/Typesense/Synonyms.ts +var RESOURCEPATH5 = "/synonyms"; +var Synonyms = class _Synonyms { + constructor(collectionName, apiCall) { + this.collectionName = collectionName; + this.apiCall = apiCall; + } + async upsert(synonymId, params) { + return this.apiCall.put( + this.endpointPath(synonymId), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${_Synonyms.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH5; + } +}; + +// src/Typesense/Synonym.ts +var Synonym = class { + constructor(collectionName, synonymId, apiCall) { + this.collectionName = collectionName; + this.synonymId = synonymId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`; + } +}; + +// src/Typesense/Document.ts +var Document = class { + constructor(collectionName, documentId, apiCall) { + this.collectionName = collectionName; + this.documentId = documentId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete(options) { + return this.apiCall.delete(this.endpointPath(), options); + } + async update(partialDocument, options = {}) { + return this.apiCall.patch(this.endpointPath(), partialDocument, options); + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`; + } +}; + +// src/Typesense/Collection.ts +var Collection = class { + constructor(name, apiCall, configuration) { + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this.individualDocuments = {}; + this.individualOverrides = {}; + this.individualSynonyms = {}; + this.name = name; + this.apiCall = apiCall; + this.configuration = configuration; + this._documents = new Documents( + this.name, + this.apiCall, + this.configuration + ); + this._overrides = new Overrides(this.name, this.apiCall); + this._synonyms = new Synonyms(this.name, this.apiCall); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async update(schema) { + return this.apiCall.patch(this.endpointPath(), schema); + } + async delete(options = {}) { + return this.apiCall.delete(this.endpointPath(), options); + } + async exists() { + try { + await this.retrieve(); + return true; + } catch (e) { + if (e instanceof ObjectNotFound) return false; + throw e; + } + } + documents(documentId) { + if (!documentId) { + return this._documents; + } else { + if (this.individualDocuments[documentId] === undefined) { + this.individualDocuments[documentId] = new Document( + this.name, + documentId, + this.apiCall + ); + } + return this.individualDocuments[documentId]; + } + } + overrides(overrideId) { + if (overrideId === undefined) { + return this._overrides; + } else { + if (this.individualOverrides[overrideId] === undefined) { + this.individualOverrides[overrideId] = new Override( + this.name, + overrideId, + this.apiCall + ); + } + return this.individualOverrides[overrideId]; + } + } + synonyms(synonymId) { + if (synonymId === undefined) { + return this._synonyms; + } else { + if (this.individualSynonyms[synonymId] === undefined) { + this.individualSynonyms[synonymId] = new Synonym( + this.name, + synonymId, + this.apiCall + ); + } + return this.individualSynonyms[synonymId]; + } + } + endpointPath() { + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +}; + +// src/Typesense/Aliases.ts +var RESOURCEPATH6 = "/aliases"; +var Aliases = class _Aliases { + constructor(apiCall) { + this.apiCall = apiCall; + } + async upsert(name, mapping) { + return this.apiCall.put( + this.endpointPath(name), + mapping + ); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH6); + } + endpointPath(aliasName) { + return `${_Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH6; + } +}; + +// src/Typesense/Alias.ts +var Alias = class { + constructor(name, apiCall) { + this.name = name; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +}; + +// src/Typesense/Keys.ts +var import_crypto = __toESM(require_crypto()); +var RESOURCEPATH7 = "/keys"; +var Keys = class _Keys { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async create(params) { + return this.apiCall.post(_Keys.RESOURCEPATH, params); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH7); + } + generateScopedSearchKey(searchKey, parameters) { + const normalizedParams = normalizeArrayableParams(parameters); + const paramsJSON = JSON.stringify(normalizedParams); + const digest = Buffer.from( + (0, import_crypto.createHmac)("sha256", searchKey).update(paramsJSON).digest("base64") + ); + const keyPrefix = searchKey.substr(0, 4); + const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`; + return Buffer.from(rawScopedKey).toString("base64"); + } + static get RESOURCEPATH() { + return RESOURCEPATH7; + } +}; + +// src/Typesense/Key.ts +var Key = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/Debug.ts +var RESOURCEPATH8 = "/debug"; +var Debug = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH8); + } +}; + +// src/Typesense/Metrics.ts +var RESOURCEPATH9 = "/metrics.json"; +var Metrics = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH9); + } +}; + +// src/Typesense/Stats.ts +var RESOURCEPATH10 = "/stats.json"; +var Metrics2 = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH10); + } +}; + +// src/Typesense/Health.ts +var RESOURCEPATH11 = "/health"; +var Health = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH11); + } +}; + +// src/Typesense/Operations.ts +var RESOURCEPATH12 = "/operations"; +var Operations = class { + constructor(apiCall) { + this.apiCall = apiCall; + } + async perform(operationName, queryParameters = {}) { + return this.apiCall.post( + `${RESOURCEPATH12}/${operationName}`, + {}, + queryParameters + ); + } +}; + +// src/Typesense/Presets.ts +var RESOURCEPATH13 = "/presets"; +var Presets = class _Presets { + constructor(apiCall) { + this.apiCall = apiCall; + } + async upsert(presetId, params) { + if (typeof params.value === "object" && "searches" in params.value) { + const normalizedParams2 = params.value.searches.map( + (search) => normalizeArrayableParams(search) + ); + return this.apiCall.put(this.endpointPath(presetId), { + value: { searches: normalizedParams2 } + }); + } + const normalizedParams = normalizeArrayableParams(params.value); + return this.apiCall.put(this.endpointPath(presetId), { + value: normalizedParams + }); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${_Presets.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH13; + } +}; + +// src/Typesense/Preset.ts +var Preset = class { + constructor(presetId, apiCall) { + this.presetId = presetId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`; + } +}; + +// src/Typesense/AnalyticsRules.ts +var RESOURCEPATH14 = "/analytics/rules"; +var AnalyticsRules = class _AnalyticsRules { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async upsert(name, params) { + return this.apiCall.put( + this.endpointPath(name), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${_AnalyticsRules.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH14; + } +}; + +// src/Typesense/AnalyticsRule.ts +var AnalyticsRule = class { + constructor(name, apiCall) { + this.name = name; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +}; + +// src/Typesense/AnalyticsEvents.ts +var RESOURCEPATH15 = "/analytics/events"; +var AnalyticsEvents = class _AnalyticsEvents { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async create(params) { + return this.apiCall.post( + this.endpointPath(), + params + ); + } + endpointPath(operation) { + return `${_AnalyticsEvents.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH15; + } +}; + +// src/Typesense/Analytics.ts +var RESOURCEPATH16 = "/analytics"; +var Analytics = class { + constructor(apiCall) { + this.apiCall = apiCall; + this.individualAnalyticsRules = {}; + this.apiCall = apiCall; + this._analyticsRules = new AnalyticsRules(this.apiCall); + this._analyticsEvents = new AnalyticsEvents(this.apiCall); + } + rules(id) { + if (id === undefined) { + return this._analyticsRules; + } else { + if (this.individualAnalyticsRules[id] === undefined) { + this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall); + } + return this.individualAnalyticsRules[id]; + } + } + events() { + return this._analyticsEvents; + } + static get RESOURCEPATH() { + return RESOURCEPATH16; + } +}; + +// src/Typesense/Stopwords.ts +var RESOURCEPATH17 = "/stopwords"; +var Stopwords = class _Stopwords { + constructor(apiCall) { + this.apiCall = apiCall; + } + async upsert(stopwordId, params) { + return this.apiCall.put( + this.endpointPath(stopwordId), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${_Stopwords.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH17; + } +}; + +// src/Typesense/Stopword.ts +var Stopword = class { + constructor(stopwordId, apiCall) { + this.stopwordId = stopwordId; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`; + } +}; + +// src/Typesense/ConversationModels.ts +var RESOURCEPATH18 = "/conversations/models"; +var ConversationModels = class _ConversationModels { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async create(params) { + return this.apiCall.post( + this.endpointPath(), + params + ); + } + async retrieve() { + return this.apiCall.get( + this.endpointPath() + ); + } + endpointPath(operation) { + return `${_ConversationModels.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH18; + } +}; + +// src/Typesense/ConversationModel.ts +var ConversationModel = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async update(params) { + return this.apiCall.put( + this.endpointPath(), + params + ); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete( + this.endpointPath() + ); + } + endpointPath() { + return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/Conversations.ts +var RESOURCEPATH19 = "/conversations"; +var Conversations = class { + constructor(apiCall) { + this.apiCall = apiCall; + this.individualConversationModels = {}; + this.apiCall = apiCall; + this._conversationsModels = new ConversationModels(this.apiCall); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH19); + } + models(id) { + if (id === undefined) { + return this._conversationsModels; + } else { + if (this.individualConversationModels[id] === undefined) { + this.individualConversationModels[id] = new ConversationModel( + id, + this.apiCall + ); + } + return this.individualConversationModels[id]; + } + } + static get RESOURCEPATH() { + return RESOURCEPATH19; + } +}; + +// src/Typesense/Conversation.ts +var Conversation = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async update(params) { + return this.apiCall.put( + this.endpointPath(), + params + ); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/StemmingDictionaries.ts +var RESOURCEPATH20 = "/stemming/dictionaries"; +var StemmingDictionaries = class _StemmingDictionaries { + constructor(apiCall) { + this.apiCall = apiCall; + this.apiCall = apiCall; + } + async upsert(id, wordRootCombinations) { + const wordRootCombinationsInJSONLFormat = Array.isArray( + wordRootCombinations + ) ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join("\n") : wordRootCombinations; + const resultsInJSONLFormat = await this.apiCall.performRequest( + "post", + this.endpointPath("import"), + { + queryParameters: { id }, + bodyParameters: wordRootCombinationsInJSONLFormat, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true + } + ); + return Array.isArray(wordRootCombinations) ? resultsInJSONLFormat.split("\n").map((line) => JSON.parse(line)) : resultsInJSONLFormat; + } + async retrieve() { + return this.apiCall.get( + this.endpointPath() + ); + } + endpointPath(operation) { + return operation === undefined ? `${_StemmingDictionaries.RESOURCEPATH}` : `${_StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH20; + } +}; + +// src/Typesense/StemmingDictionary.ts +var StemmingDictionary = class { + constructor(id, apiCall) { + this.id = id; + this.apiCall = apiCall; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath() { + return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +}; + +// src/Typesense/Stemming.ts +var RESOURCEPATH21 = "/stemming"; +var Stemming = class { + constructor(apiCall) { + this.apiCall = apiCall; + this.individualStemmingDictionaries = {}; + this.apiCall = apiCall; + this._stemmingDictionaries = new StemmingDictionaries(this.apiCall); + } + dictionaries(id) { + if (id === undefined) { + return this._stemmingDictionaries; + } else { + if (this.individualStemmingDictionaries[id] === undefined) { + this.individualStemmingDictionaries[id] = new StemmingDictionary( + id, + this.apiCall + ); + } + return this.individualStemmingDictionaries[id]; + } + } + static get RESOURCEPATH() { + return RESOURCEPATH21; + } +}; + +// src/Typesense/Client.ts +var Client = class { + constructor(options) { + options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false; + this.configuration = new Configuration(options); + this.apiCall = new ApiCall(this.configuration); + this.debug = new Debug(this.apiCall); + this.metrics = new Metrics(this.apiCall); + this.stats = new Metrics2(this.apiCall); + this.health = new Health(this.apiCall); + this.operations = new Operations(this.apiCall); + this.multiSearch = new MultiSearch(this.apiCall, this.configuration); + this._collections = new Collections(this.apiCall); + this.individualCollections = {}; + this._aliases = new Aliases(this.apiCall); + this.individualAliases = {}; + this._keys = new Keys(this.apiCall); + this.individualKeys = {}; + this._presets = new Presets(this.apiCall); + this.individualPresets = {}; + this._stopwords = new Stopwords(this.apiCall); + this.individualStopwords = {}; + this.analytics = new Analytics(this.apiCall); + this.stemming = new Stemming(this.apiCall); + this._conversations = new Conversations(this.apiCall); + this.individualConversations = {}; + } + collections(collectionName) { + if (collectionName === undefined) { + return this._collections; + } else { + if (this.individualCollections[collectionName] === undefined) { + this.individualCollections[collectionName] = new Collection( + collectionName, + this.apiCall, + this.configuration + ); + } + return this.individualCollections[collectionName]; + } + } + aliases(aliasName) { + if (aliasName === undefined) { + return this._aliases; + } else { + if (this.individualAliases[aliasName] === undefined) { + this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall); + } + return this.individualAliases[aliasName]; + } + } + keys(id) { + if (id === undefined) { + return this._keys; + } else { + if (this.individualKeys[id] === undefined) { + this.individualKeys[id] = new Key(id, this.apiCall); + } + return this.individualKeys[id]; + } + } + presets(id) { + if (id === undefined) { + return this._presets; + } else { + if (this.individualPresets[id] === undefined) { + this.individualPresets[id] = new Preset(id, this.apiCall); + } + return this.individualPresets[id]; + } + } + stopwords(id) { + if (id === undefined) { + return this._stopwords; + } else { + if (this.individualStopwords[id] === undefined) { + this.individualStopwords[id] = new Stopword(id, this.apiCall); + } + return this.individualStopwords[id]; + } + } + conversations(id) { + if (id === undefined) { + return this._conversations; + } else { + if (this.individualConversations[id] === undefined) { + this.individualConversations[id] = new Conversation(id, this.apiCall); + } + return this.individualConversations[id]; + } + } +}; + +export { Client, Errors_exports as Errors, SearchClient }; +//# sourceMappingURL=typesense.min.mjs.map //# sourceMappingURL=typesense.min.mjs.map \ No newline at end of file diff --git a/dist/typesense.min.mjs.map b/dist/typesense.min.mjs.map index 6ecc17fb..436b291a 100644 --- a/dist/typesense.min.mjs.map +++ b/dist/typesense.min.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Configuration.ts","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/ApiCall.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/Collections.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Utils.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/StemmingDictionaries.ts","../src/Typesense/StemmingDictionary.ts","../src/Typesense/Stemming.ts","../src/Typesense/Client.ts"],"sourcesContent":["module.exports = {}","module.exports = {}","module.exports = {}","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport type DeleteQuery =\n | {\n truncate?: true;\n }\n | {\n truncate?: never;\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n };\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n max_filter_by_candidates?: number; // default: 4\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n rerank_hybrid_matches?: boolean;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n union?: true;\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopolygon\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema\n extends Pick<\n CollectionCreateSchema,\n \"token_separators\" | \"symbols_to_index\"\n > {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName:\n | \"vote\"\n | \"snapshot\"\n | \"cache/clear\"\n | \"schema_changes\"\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters,\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport type { StemmingDictionaryCreateSchema } from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming/dictionaries\";\n\nexport interface StemmingDictionariesRetrieveSchema {\n dictionaries: string[];\n}\n\nexport default class StemmingDictionaries {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n id: string,\n wordRootCombinations: StemmingDictionaryCreateSchema[] | string,\n ): Promise {\n const wordRootCombinationsInJSONLFormat = Array.isArray(\n wordRootCombinations,\n )\n ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join(\"\\n\")\n : wordRootCombinations;\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: {id},\n bodyParameters: wordRootCombinationsInJSONLFormat,\n additionalHeaders: {\"Content-Type\": \"text/plain\"},\n skipConnectionTimeout: true,\n }\n );\n\n return Array.isArray(wordRootCombinations)\n ? resultsInJSONLFormat\n .split(\"\\n\")\n .map((line) => JSON.parse(line) as StemmingDictionaryCreateSchema)\n : resultsInJSONLFormat;\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return operation === undefined\n ? `${StemmingDictionaries.RESOURCEPATH}`\n : `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\n\nexport interface StemmingDictionaryCreateSchema {\n root: string;\n word: string;\n}\n\nexport interface StemmingDictionarySchema {\n id: string;\n words: StemmingDictionaryCreateSchema[];\n}\n\nexport default class StemmingDictionary {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import type ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\nimport StemmingDictionary from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming\";\n\nexport default class Stemming {\n private readonly _stemmingDictionaries: StemmingDictionaries;\n private readonly individualStemmingDictionaries: Record<\n string,\n StemmingDictionary\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._stemmingDictionaries = new StemmingDictionaries(this.apiCall);\n }\n\n dictionaries(): StemmingDictionaries;\n dictionaries(id: string): StemmingDictionary;\n dictionaries(id?: string): StemmingDictionaries | StemmingDictionary {\n if (id === undefined) {\n return this._stemmingDictionaries;\n } else {\n if (this.individualStemmingDictionaries[id] === undefined) {\n this.individualStemmingDictionaries[id] = new StemmingDictionary(\n id,\n this.apiCall,\n );\n }\n return this.individualStemmingDictionaries[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\nimport Stemming from \"./Stemming\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n stemming: Stemming;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this.stemming = new Stemming(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"],"mappings":"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","names":["require_http","__commonJSMin","exports","module","require_https","__commonJSMin","exports","module","require_crypto","__commonJSMin","exports","module","logger","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","TypesenseError","message","httpBody","httpStatus","HTTPError","TypesenseError","MissingConfigurationError","TypesenseError","ObjectAlreadyExists","TypesenseError","ObjectNotFound","TypesenseError","ObjectUnprocessable","TypesenseError","RequestMalformed","TypesenseError","RequestUnauthorized","TypesenseError","ServerError","TypesenseError","ImportError","TypesenseError","message","importResults","payload","Configuration","options","node","logger","MissingConfigurationError","key","array","i","j","import_http","import_https","axios","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted","numTries","node","abortListener","requestOptions","status","data","headers","transformedData","HTTPAgent","HTTPSAgent","source","response","error","candidateNode","isDueForHealthcheck","i","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","httpBody","errorMessage","TypesenseError","RequestMalformed","RequestUnauthorized","ObjectNotFound","ObjectAlreadyExists","ObjectUnprocessable","ServerError","HTTPError","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","response","oldestEntry","RESOURCEPATH","Collections","apiCall","schema","options","RESOURCEPATH","SearchOnlyDocuments","collectionName","apiCall","configuration","RequestWithCache","searchParameters","cacheSearchResultsForSeconds","abortSignal","additionalQueryParams","normalizedParams","normalizeArrayableParams","queryParams","operation","Collections","arrayableParams","isNodeJSEnvironment","Documents","SearchOnlyDocuments","collectionName","apiCall","configuration","document","options","query","documents","documentsInJSONLFormat","error","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","ImportError","readableStream","hasNoArrayValues","params","arrayableParams","key","isNonArrayValue","normalizeArrayableParams","result","value","RESOURCEPATH","MultiSearch","apiCall","configuration","useTextContentType","RequestWithCache","searchRequests","commonParams","cacheSearchResultsForSeconds","additionalHeaders","additionalQueryParams","queryParams","normalizedSearchRequests","normalizeArrayableParams","normalizedQueryParams","SearchOnlyCollection","name","apiCall","configuration","SearchOnlyDocuments","SearchClient","options","Configuration","ApiCall","MultiSearch","_","collection","collectionName","SearchOnlyCollection","RESOURCEPATH","Overrides","_Overrides","collectionName","apiCall","overrideId","params","operation","Collections","Override","collectionName","overrideId","apiCall","Collections","Overrides","RESOURCEPATH","Synonyms","_Synonyms","collectionName","apiCall","synonymId","params","operation","Collections","Synonym","collectionName","synonymId","apiCall","Collections","Synonyms","Document","collectionName","documentId","apiCall","options","partialDocument","Collections","Documents","Collection","name","apiCall","configuration","Documents","Overrides","Synonyms","schema","options","ObjectNotFound","documentId","Document","overrideId","Override","synonymId","Synonym","Collections","RESOURCEPATH","Aliases","_Aliases","apiCall","name","mapping","aliasName","Alias","name","apiCall","Aliases","import_crypto","RESOURCEPATH","Keys","_Keys","apiCall","params","searchKey","parameters","normalizedParams","normalizeArrayableParams","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","apiCall","Keys","RESOURCEPATH","Debug","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Metrics","apiCall","RESOURCEPATH","Health","apiCall","RESOURCEPATH","Operations","apiCall","operationName","queryParameters","RESOURCEPATH","Presets","_Presets","apiCall","presetId","params","normalizedParams","search","normalizeArrayableParams","operation","Preset","presetId","apiCall","Presets","RESOURCEPATH","AnalyticsRules","_AnalyticsRules","apiCall","name","params","operation","AnalyticsRule","name","apiCall","AnalyticsRules","RESOURCEPATH","AnalyticsEvents","_AnalyticsEvents","apiCall","params","operation","RESOURCEPATH","Analytics","apiCall","AnalyticsRules","AnalyticsEvents","id","AnalyticsRule","RESOURCEPATH","Stopwords","_Stopwords","apiCall","stopwordId","params","operation","Stopword","stopwordId","apiCall","Stopwords","RESOURCEPATH","ConversationModels","_ConversationModels","apiCall","params","operation","ConversationModel","id","apiCall","params","ConversationModels","RESOURCEPATH","Conversations","apiCall","ConversationModels","id","ConversationModel","Conversation","id","apiCall","params","Conversations","RESOURCEPATH","StemmingDictionaries","_StemmingDictionaries","apiCall","id","wordRootCombinations","wordRootCombinationsInJSONLFormat","combo","resultsInJSONLFormat","line","operation","StemmingDictionary","id","apiCall","StemmingDictionaries","RESOURCEPATH","Stemming","apiCall","StemmingDictionaries","id","StemmingDictionary","Client","options","Configuration","ApiCall","Debug","Metrics","Health","Operations","MultiSearch","Collections","Aliases","Keys","Presets","Stopwords","Analytics","Stemming","Conversations","collectionName","Collection","aliasName","Alias","id","Key","Preset","Stopword","Conversation"]} \ No newline at end of file +{"version":3,"sources":["node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/Configuration.ts","../src/Typesense/ApiCall.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/Collections.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Utils.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/StemmingDictionaries.ts","../src/Typesense/StemmingDictionary.ts","../src/Typesense/Stemming.ts","../src/Typesense/Client.ts"],"names":["HTTPAgent","HTTPSAgent","RESOURCEPATH","isNodeJSEnvironment","Metrics","normalizedParams"],"mappings":"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","file":"typesense.min.mjs","sourcesContent":["module.exports = {}","module.exports = {}","module.exports = {}","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport type DeleteQuery =\n | {\n truncate?: true;\n }\n | {\n truncate?: never;\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n };\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n max_filter_by_candidates?: number; // default: 4\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n rerank_hybrid_matches?: boolean;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n union?: true;\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopolygon\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema\n extends Pick<\n CollectionCreateSchema,\n \"token_separators\" | \"symbols_to_index\"\n > {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName:\n | \"vote\"\n | \"snapshot\"\n | \"cache/clear\"\n | \"schema_changes\"\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters,\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport type { StemmingDictionaryCreateSchema } from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming/dictionaries\";\n\nexport interface StemmingDictionariesRetrieveSchema {\n dictionaries: string[];\n}\n\nexport default class StemmingDictionaries {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n id: string,\n wordRootCombinations: StemmingDictionaryCreateSchema[] | string,\n ): Promise {\n const wordRootCombinationsInJSONLFormat = Array.isArray(\n wordRootCombinations,\n )\n ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join(\"\\n\")\n : wordRootCombinations;\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: {id},\n bodyParameters: wordRootCombinationsInJSONLFormat,\n additionalHeaders: {\"Content-Type\": \"text/plain\"},\n skipConnectionTimeout: true,\n }\n );\n\n return Array.isArray(wordRootCombinations)\n ? resultsInJSONLFormat\n .split(\"\\n\")\n .map((line) => JSON.parse(line) as StemmingDictionaryCreateSchema)\n : resultsInJSONLFormat;\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return operation === undefined\n ? `${StemmingDictionaries.RESOURCEPATH}`\n : `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\n\nexport interface StemmingDictionaryCreateSchema {\n root: string;\n word: string;\n}\n\nexport interface StemmingDictionarySchema {\n id: string;\n words: StemmingDictionaryCreateSchema[];\n}\n\nexport default class StemmingDictionary {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import type ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\nimport StemmingDictionary from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming\";\n\nexport default class Stemming {\n private readonly _stemmingDictionaries: StemmingDictionaries;\n private readonly individualStemmingDictionaries: Record<\n string,\n StemmingDictionary\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._stemmingDictionaries = new StemmingDictionaries(this.apiCall);\n }\n\n dictionaries(): StemmingDictionaries;\n dictionaries(id: string): StemmingDictionary;\n dictionaries(id?: string): StemmingDictionaries | StemmingDictionary {\n if (id === undefined) {\n return this._stemmingDictionaries;\n } else {\n if (this.individualStemmingDictionaries[id] === undefined) {\n this.individualStemmingDictionaries[id] = new StemmingDictionary(\n id,\n this.apiCall,\n );\n }\n return this.individualStemmingDictionaries[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\nimport Stemming from \"./Stemming\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n stemming: Stemming;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this.stemming = new Stemming(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"]} \ No newline at end of file diff --git a/dist/typesense.mjs b/dist/typesense.mjs index 1451f876..eb61cd5f 100644 --- a/dist/typesense.mjs +++ b/dist/typesense.mjs @@ -1,3 +1,6 @@ +import logger from 'loglevel'; +import axios from 'axios'; + var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; @@ -24,14 +27,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); // node-modules-polyfills-empty:http var require_http = __commonJS({ "node-modules-polyfills-empty:http"(exports, module) { - "use strict"; module.exports = {}; } }); @@ -39,7 +41,6 @@ var require_http = __commonJS({ // node-modules-polyfills-empty:https var require_https = __commonJS({ "node-modules-polyfills-empty:https"(exports, module) { - "use strict"; module.exports = {}; } }); @@ -47,14 +48,10 @@ var require_https = __commonJS({ // node-modules-polyfills-empty:crypto var require_crypto = __commonJS({ "node-modules-polyfills-empty:crypto"(exports, module) { - "use strict"; module.exports = {}; } }); -// src/Typesense/Configuration.ts -import logger from "loglevel"; - // src/Typesense/Errors/index.ts var Errors_exports = {}; __export(Errors_exports, { @@ -139,7 +136,7 @@ var Configuration = class { this.nearestNode = this.setDefaultPortInNode(this.nearestNode); this.connectionTimeoutSeconds = options.connectionTimeoutSeconds || options.timeoutSeconds || 5; this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60; - this.numRetries = (options.numRetries !== void 0 && options.numRetries >= 0 ? options.numRetries : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; + this.numRetries = (options.numRetries !== undefined && options.numRetries >= 0 ? options.numRetries : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1; this.apiKey = options.apiKey; this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; @@ -229,7 +226,6 @@ var Configuration = class { // src/Typesense/ApiCall.ts var import_http = __toESM(require_http()); var import_https = __toESM(require_https()); -import axios from "axios"; var APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; var HEALTHY = true; var UNHEALTHY = false; @@ -252,7 +248,7 @@ var ApiCall = class { } async get(endpoint, queryParameters = {}, { abortSignal = null, - responseType = void 0 + responseType = undefined } = {}) { return this.performRequest("get", endpoint, { queryParameters, @@ -283,7 +279,7 @@ var ApiCall = class { }); } getAdapter() { - if (!this.configuration.axiosAdapter) return void 0; + if (!this.configuration.axiosAdapter) return undefined; if (typeof this.configuration.axiosAdapter === "function") return this.configuration.axiosAdapter; const isCloudflareWorkers = typeof navigator !== "undefined" && navigator.userAgent === "Cloudflare-Workers"; @@ -294,9 +290,9 @@ var ApiCall = class { bodyParameters = null, additionalHeaders = {}, abortSignal = null, - responseType = void 0, + responseType = undefined, skipConnectionTimeout = false, - enableKeepAlive = void 0 + enableKeepAlive = undefined }) { this.configuration.validate(); const requestNumber = Date.now(); @@ -693,7 +689,7 @@ var SearchOnlyDocuments = class { ); } endpointPath(operation) { - return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH2}${operation === void 0 ? "" : "/" + operation}`; + return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH2}${operation === undefined ? "" : "/" + operation}`; } static get RESOURCEPATH() { return RESOURCEPATH2; @@ -866,7 +862,7 @@ var Documents = class extends SearchOnlyDocuments { // src/Typesense/Utils.ts function hasNoArrayValues(params) { - return Object.keys(arrayableParams).filter((key) => params[key] !== void 0).every((key) => isNonArrayValue(params[key])); + return Object.keys(arrayableParams).filter((key) => params[key] !== undefined).every((key) => isNonArrayValue(params[key])); } function normalizeArrayableParams(params) { const result = { ...params }; @@ -974,7 +970,7 @@ var SearchClient = class { "Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object." ); } else { - if (this.individualCollections[collectionName] === void 0) { + if (this.individualCollections[collectionName] === undefined) { this.individualCollections[collectionName] = new SearchOnlyCollection( collectionName, this.apiCall, @@ -1003,7 +999,7 @@ var Overrides = class _Overrides { return this.apiCall.get(this.endpointPath()); } endpointPath(operation) { - return `${Collections.RESOURCEPATH}/${this.collectionName}${_Overrides.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${Collections.RESOURCEPATH}/${this.collectionName}${_Overrides.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH4; @@ -1045,7 +1041,7 @@ var Synonyms = class _Synonyms { return this.apiCall.get(this.endpointPath()); } endpointPath(operation) { - return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${_Synonyms.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${_Synonyms.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH5; @@ -1133,7 +1129,7 @@ var Collection = class { if (!documentId) { return this._documents; } else { - if (this.individualDocuments[documentId] === void 0) { + if (this.individualDocuments[documentId] === undefined) { this.individualDocuments[documentId] = new Document( this.name, documentId, @@ -1144,10 +1140,10 @@ var Collection = class { } } overrides(overrideId) { - if (overrideId === void 0) { + if (overrideId === undefined) { return this._overrides; } else { - if (this.individualOverrides[overrideId] === void 0) { + if (this.individualOverrides[overrideId] === undefined) { this.individualOverrides[overrideId] = new Override( this.name, overrideId, @@ -1158,10 +1154,10 @@ var Collection = class { } } synonyms(synonymId) { - if (synonymId === void 0) { + if (synonymId === undefined) { return this._synonyms; } else { - if (this.individualSynonyms[synonymId] === void 0) { + if (this.individualSynonyms[synonymId] === undefined) { this.individualSynonyms[synonymId] = new Synonym( this.name, synonymId, @@ -1345,7 +1341,7 @@ var Presets = class _Presets { return this.apiCall.get(this.endpointPath()); } endpointPath(operation) { - return `${_Presets.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${_Presets.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH13; @@ -1386,7 +1382,7 @@ var AnalyticsRules = class _AnalyticsRules { return this.apiCall.get(this.endpointPath()); } endpointPath(operation) { - return `${_AnalyticsRules.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${_AnalyticsRules.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH14; @@ -1424,7 +1420,7 @@ var AnalyticsEvents = class _AnalyticsEvents { ); } endpointPath(operation) { - return `${_AnalyticsEvents.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${_AnalyticsEvents.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH15; @@ -1442,10 +1438,10 @@ var Analytics = class { this._analyticsEvents = new AnalyticsEvents(this.apiCall); } rules(id) { - if (id === void 0) { + if (id === undefined) { return this._analyticsRules; } else { - if (this.individualAnalyticsRules[id] === void 0) { + if (this.individualAnalyticsRules[id] === undefined) { this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall); } return this.individualAnalyticsRules[id]; @@ -1475,7 +1471,7 @@ var Stopwords = class _Stopwords { return this.apiCall.get(this.endpointPath()); } endpointPath(operation) { - return `${_Stopwords.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${_Stopwords.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH17; @@ -1518,7 +1514,7 @@ var ConversationModels = class _ConversationModels { ); } endpointPath(operation) { - return `${_ConversationModels.RESOURCEPATH}${operation === void 0 ? "" : "/" + encodeURIComponent(operation)}`; + return `${_ConversationModels.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH18; @@ -1563,10 +1559,10 @@ var Conversations = class { return this.apiCall.get(RESOURCEPATH19); } models(id) { - if (id === void 0) { + if (id === undefined) { return this._conversationsModels; } else { - if (this.individualConversationModels[id] === void 0) { + if (this.individualConversationModels[id] === undefined) { this.individualConversationModels[id] = new ConversationModel( id, this.apiCall @@ -1632,7 +1628,7 @@ var StemmingDictionaries = class _StemmingDictionaries { ); } endpointPath(operation) { - return operation === void 0 ? `${_StemmingDictionaries.RESOURCEPATH}` : `${_StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`; + return operation === undefined ? `${_StemmingDictionaries.RESOURCEPATH}` : `${_StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`; } static get RESOURCEPATH() { return RESOURCEPATH20; @@ -1663,10 +1659,10 @@ var Stemming = class { this._stemmingDictionaries = new StemmingDictionaries(this.apiCall); } dictionaries(id) { - if (id === void 0) { + if (id === undefined) { return this._stemmingDictionaries; } else { - if (this.individualStemmingDictionaries[id] === void 0) { + if (this.individualStemmingDictionaries[id] === undefined) { this.individualStemmingDictionaries[id] = new StemmingDictionary( id, this.apiCall @@ -1708,10 +1704,10 @@ var Client = class { this.individualConversations = {}; } collections(collectionName) { - if (collectionName === void 0) { + if (collectionName === undefined) { return this._collections; } else { - if (this.individualCollections[collectionName] === void 0) { + if (this.individualCollections[collectionName] === undefined) { this.individualCollections[collectionName] = new Collection( collectionName, this.apiCall, @@ -1722,58 +1718,55 @@ var Client = class { } } aliases(aliasName) { - if (aliasName === void 0) { + if (aliasName === undefined) { return this._aliases; } else { - if (this.individualAliases[aliasName] === void 0) { + if (this.individualAliases[aliasName] === undefined) { this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall); } return this.individualAliases[aliasName]; } } keys(id) { - if (id === void 0) { + if (id === undefined) { return this._keys; } else { - if (this.individualKeys[id] === void 0) { + if (this.individualKeys[id] === undefined) { this.individualKeys[id] = new Key(id, this.apiCall); } return this.individualKeys[id]; } } presets(id) { - if (id === void 0) { + if (id === undefined) { return this._presets; } else { - if (this.individualPresets[id] === void 0) { + if (this.individualPresets[id] === undefined) { this.individualPresets[id] = new Preset(id, this.apiCall); } return this.individualPresets[id]; } } stopwords(id) { - if (id === void 0) { + if (id === undefined) { return this._stopwords; } else { - if (this.individualStopwords[id] === void 0) { + if (this.individualStopwords[id] === undefined) { this.individualStopwords[id] = new Stopword(id, this.apiCall); } return this.individualStopwords[id]; } } conversations(id) { - if (id === void 0) { + if (id === undefined) { return this._conversations; } else { - if (this.individualConversations[id] === void 0) { + if (this.individualConversations[id] === undefined) { this.individualConversations[id] = new Conversation(id, this.apiCall); } return this.individualConversations[id]; } } }; -export { - Client, - Errors_exports as Errors, - SearchClient -}; + +export { Client, Errors_exports as Errors, SearchClient }; diff --git a/lib/Typesense.d.ts b/lib/Typesense.d.ts index efd33ae8..9d1ef63a 100644 --- a/lib/Typesense.d.ts +++ b/lib/Typesense.d.ts @@ -1,13 +1,8 @@ -import Client from "./Typesense/Client"; import SearchClient from "./Typesense/SearchClient"; -import * as Errors from "./Typesense/Errors"; -export { Client, SearchClient, Errors }; -declare const _default: { - Client: typeof Client; - SearchClient: typeof SearchClient; - Errors: typeof Errors; -}; -export default _default; +import Client from "./Typesense/Client"; +export { SearchClient }; +export { Client }; +export * as Errors from "./Typesense/Errors"; export type * from "./Typesense/Aliases"; export type * from "./Typesense/AnalyticsEvent"; export type * from "./Typesense/AnalyticsRule"; diff --git a/lib/Typesense.js b/lib/Typesense.js index 22556ae5..e8b76e2c 100644 --- a/lib/Typesense.js +++ b/lib/Typesense.js @@ -1,12 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.Errors = exports.SearchClient = exports.Client = void 0; -var tslib_1 = require("tslib"); -var Client_1 = tslib_1.__importDefault(require("./Typesense/Client")); -exports.Client = Client_1.default; -var SearchClient_1 = tslib_1.__importDefault(require("./Typesense/SearchClient")); +exports.Errors = exports.Client = exports.SearchClient = void 0; +const tslib_1 = require("tslib"); +const SearchClient_1 = tslib_1.__importDefault(require("./Typesense/SearchClient")); exports.SearchClient = SearchClient_1.default; -var Errors = tslib_1.__importStar(require("./Typesense/Errors")); -exports.Errors = Errors; -exports.default = { Client: Client_1.default, SearchClient: SearchClient_1.default, Errors: Errors }; +const Client_1 = tslib_1.__importDefault(require("./Typesense/Client")); +exports.Client = Client_1.default; +exports.Errors = tslib_1.__importStar(require("./Typesense/Errors")); //# sourceMappingURL=Typesense.js.map \ No newline at end of file diff --git a/lib/Typesense.js.map b/lib/Typesense.js.map index 10f3e223..c57cc5ba 100644 --- a/lib/Typesense.js.map +++ b/lib/Typesense.js.map @@ -1 +1 @@ -{"version":3,"file":"Typesense.js","sourceRoot":"","sources":["../src/Typesense.ts"],"names":[],"mappings":";;;;AAAA,sEAAwC;AAI/B,iBAJF,gBAAM,CAIE;AAHf,kFAAoD;AAGnC,uBAHV,sBAAY,CAGU;AAF7B,iEAA6C;AAEd,wBAAM;AACrC,kBAAe,EAAE,MAAM,kBAAA,EAAE,YAAY,wBAAA,EAAE,MAAM,QAAA,EAAE,CAAC"} \ No newline at end of file +{"version":3,"file":"Typesense.js","sourceRoot":"","sources":["../src/Typesense.ts"],"names":[],"mappings":";;;;AAAA,oFAAoD;AAG3C,uBAHF,sBAAY,CAGE;AAFrB,wEAAwC;AAG/B,iBAHF,gBAAM,CAGE;AACf,qEAA6C"} \ No newline at end of file diff --git a/lib/Typesense/Alias.js b/lib/Typesense/Alias.js index 08cb130a..8111c6a3 100644 --- a/lib/Typesense/Alias.js +++ b/lib/Typesense/Alias.js @@ -1,30 +1,21 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Aliases_1 = tslib_1.__importDefault(require("./Aliases")); -var Alias = /** @class */ (function () { - function Alias(name, apiCall) { +const tslib_1 = require("tslib"); +const Aliases_1 = tslib_1.__importDefault(require("./Aliases")); +class Alias { + constructor(name, apiCall) { this.name = name; this.apiCall = apiCall; } - Alias.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Alias.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Alias.prototype.endpointPath = function () { - return "".concat(Aliases_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.name)); - }; - return Alias; -}()); + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Aliases_1.default.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +} exports.default = Alias; //# sourceMappingURL=Alias.js.map \ No newline at end of file diff --git a/lib/Typesense/Alias.js.map b/lib/Typesense/Alias.js.map index 03fa9442..76b1e5eb 100644 --- a/lib/Typesense/Alias.js.map +++ b/lib/Typesense/Alias.js.map @@ -1 +1 @@ -{"version":3,"file":"Alias.js","sourceRoot":"","sources":["../../src/Typesense/Alias.ts"],"names":[],"mappings":";;;AAAA,8DAA2D;AAG3D;IACE,eAAoB,IAAY,EAAU,OAAgB;QAAtC,SAAI,GAAJ,IAAI,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExD,wBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACrE;IAEK,sBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAwB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACxE;IAEO,4BAAY,GAApB;QACE,OAAO,UAAG,iBAAO,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC;IACpE,CAAC;IACH,YAAC;AAAD,CAAC,AAdD,IAcC"} \ No newline at end of file +{"version":3,"file":"Alias.js","sourceRoot":"","sources":["../../src/Typesense/Alias.ts"],"names":[],"mappings":";;;AAAA,gEAA2D;AAG3D,MAAqB,KAAK;IACxB,YAAoB,IAAY,EAAU,OAAgB;QAAtC,SAAI,GAAJ,IAAI,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAE9D,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAwB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACzE,CAAC;IAEO,YAAY;QAClB,OAAO,GAAG,iBAAO,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACpE,CAAC;CACF;AAdD,wBAcC"} \ No newline at end of file diff --git a/lib/Typesense/Aliases.js b/lib/Typesense/Aliases.js index ac647bc9..481cf13e 100644 --- a/lib/Typesense/Aliases.js +++ b/lib/Typesense/Aliases.js @@ -1,36 +1,22 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/aliases"; -var Aliases = /** @class */ (function () { - function Aliases(apiCall) { +const RESOURCEPATH = "/aliases"; +class Aliases { + constructor(apiCall) { this.apiCall = apiCall; } - Aliases.prototype.upsert = function (name, mapping) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(name), mapping)]; - }); - }); - }; - Aliases.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - Aliases.prototype.endpointPath = function (aliasName) { - return "".concat(Aliases.RESOURCEPATH, "/").concat(encodeURIComponent(aliasName)); - }; - Object.defineProperty(Aliases, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Aliases; -}()); + async upsert(name, mapping) { + return this.apiCall.put(this.endpointPath(name), mapping); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH); + } + endpointPath(aliasName) { + return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = Aliases; //# sourceMappingURL=Aliases.js.map \ No newline at end of file diff --git a/lib/Typesense/Aliases.js.map b/lib/Typesense/Aliases.js.map index 9b3a301a..e97188a0 100644 --- a/lib/Typesense/Aliases.js.map +++ b/lib/Typesense/Aliases.js.map @@ -1 +1 @@ -{"version":3,"file":"Aliases.js","sourceRoot":"","sources":["../../src/Typesense/Aliases.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,UAAU,CAAC;AAchC;IACE,iBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,wBAAM,GAAZ,UACE,IAAY,EACZ,OAAoC;;;gBAEpC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EACvB,OAAO,CACR,EAAC;;;KACH;IAEK,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAkC,YAAY,CAAC,EAAC;;;KACxE;IAEO,8BAAY,GAApB,UAAqB,SAAS;QAC5B,OAAO,UAAG,OAAO,CAAC,YAAY,cAAI,kBAAkB,CAAC,SAAS,CAAC,CAAE,CAAC;IACpE,CAAC;IAED,sBAAW,uBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,cAAC;AAAD,CAAC,AAxBD,IAwBC"} \ No newline at end of file +{"version":3,"file":"Aliases.js","sourceRoot":"","sources":["../../src/Typesense/Aliases.ts"],"names":[],"mappings":";;AAEA,MAAM,YAAY,GAAG,UAAU,CAAC;AAchC,MAAqB,OAAO;IAC1B,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC,KAAK,CAAC,MAAM,CACV,IAAY,EACZ,OAAoC;QAEpC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EACvB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAkC,YAAY,CAAC,CAAC;IACzE,CAAC;IAEO,YAAY,CAAC,SAAS;QAC5B,OAAO,GAAG,OAAO,CAAC,YAAY,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAxBD,0BAwBC"} \ No newline at end of file diff --git a/lib/Typesense/Analytics.js b/lib/Typesense/Analytics.js index 620f3bfb..aabeff97 100644 --- a/lib/Typesense/Analytics.js +++ b/lib/Typesense/Analytics.js @@ -1,19 +1,19 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var AnalyticsRules_1 = tslib_1.__importDefault(require("./AnalyticsRules")); -var AnalyticsRule_1 = tslib_1.__importDefault(require("./AnalyticsRule")); -var AnalyticsEvents_1 = tslib_1.__importDefault(require("./AnalyticsEvents")); -var RESOURCEPATH = "/analytics"; -var Analytics = /** @class */ (function () { - function Analytics(apiCall) { +const tslib_1 = require("tslib"); +const AnalyticsRules_1 = tslib_1.__importDefault(require("./AnalyticsRules")); +const AnalyticsRule_1 = tslib_1.__importDefault(require("./AnalyticsRule")); +const AnalyticsEvents_1 = tslib_1.__importDefault(require("./AnalyticsEvents")); +const RESOURCEPATH = "/analytics"; +class Analytics { + constructor(apiCall) { this.apiCall = apiCall; this.individualAnalyticsRules = {}; this.apiCall = apiCall; this._analyticsRules = new AnalyticsRules_1.default(this.apiCall); this._analyticsEvents = new AnalyticsEvents_1.default(this.apiCall); } - Analytics.prototype.rules = function (id) { + rules(id) { if (id === undefined) { return this._analyticsRules; } @@ -23,18 +23,13 @@ var Analytics = /** @class */ (function () { } return this.individualAnalyticsRules[id]; } - }; - Analytics.prototype.events = function () { + } + events() { return this._analyticsEvents; - }; - Object.defineProperty(Analytics, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Analytics; -}()); + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = Analytics; //# sourceMappingURL=Analytics.js.map \ No newline at end of file diff --git a/lib/Typesense/Analytics.js.map b/lib/Typesense/Analytics.js.map index dd57042d..a9c24497 100644 --- a/lib/Typesense/Analytics.js.map +++ b/lib/Typesense/Analytics.js.map @@ -1 +1 @@ -{"version":3,"file":"Analytics.js","sourceRoot":"","sources":["../../src/Typesense/Analytics.ts"],"names":[],"mappings":";;;AACA,4EAA8C;AAC9C,0EAA4C;AAC5C,8EAAgD;AAEhD,IAAM,YAAY,GAAG,YAAY,CAAC;AAElC;IAKE,mBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAH5B,6BAAwB,GAAkC,EAAE,CAAC;QAI5E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,wBAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,GAAG,IAAI,yBAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAID,yBAAK,GAAL,UAAM,EAAW;QACf,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBACpD,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,GAAG,IAAI,uBAAa,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,0BAAM,GAAN;QACE,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,sBAAW,yBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,gBAAC;AAAD,CAAC,AA/BD,IA+BC"} \ No newline at end of file +{"version":3,"file":"Analytics.js","sourceRoot":"","sources":["../../src/Typesense/Analytics.ts"],"names":[],"mappings":";;;AACA,8EAA8C;AAC9C,4EAA4C;AAC5C,gFAAgD;AAEhD,MAAM,YAAY,GAAG,YAAY,CAAC;AAElC,MAAqB,SAAS;IAK5B,YAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAH5B,6BAAwB,GAAkC,EAAE,CAAC;QAI5E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,wBAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,GAAG,IAAI,yBAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAID,KAAK,CAAC,EAAW;QACf,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBACpD,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,GAAG,IAAI,uBAAa,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AA/BD,4BA+BC"} \ No newline at end of file diff --git a/lib/Typesense/AnalyticsEvents.js b/lib/Typesense/AnalyticsEvents.js index 9f8691a7..7e01bf01 100644 --- a/lib/Typesense/AnalyticsEvents.js +++ b/lib/Typesense/AnalyticsEvents.js @@ -1,30 +1,20 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/analytics/events"; -var AnalyticsEvents = /** @class */ (function () { - function AnalyticsEvents(apiCall) { +const RESOURCEPATH = "/analytics/events"; +class AnalyticsEvents { + constructor(apiCall) { this.apiCall = apiCall; this.apiCall = apiCall; } - AnalyticsEvents.prototype.create = function (params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.post(this.endpointPath(), params)]; - }); - }); - }; - AnalyticsEvents.prototype.endpointPath = function (operation) { - return "".concat(AnalyticsEvents.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(AnalyticsEvents, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return AnalyticsEvents; -}()); + async create(params) { + return this.apiCall.post(this.endpointPath(), params); + } + endpointPath(operation) { + return `${AnalyticsEvents.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = AnalyticsEvents; //# sourceMappingURL=AnalyticsEvents.js.map \ No newline at end of file diff --git a/lib/Typesense/AnalyticsEvents.js.map b/lib/Typesense/AnalyticsEvents.js.map index 12348751..9b96e5ef 100644 --- a/lib/Typesense/AnalyticsEvents.js.map +++ b/lib/Typesense/AnalyticsEvents.js.map @@ -1 +1 @@ -{"version":3,"file":"AnalyticsEvents.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsEvents.ts"],"names":[],"mappings":";;;AAGA,IAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC;IACE,yBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,gCAAM,GAAZ,UACE,MAAkC;;;gBAElC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,EAAC;;;KACH;IAEO,sCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,eAAe,CAAC,YAAY,SACpC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,+BAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,sBAAC;AAAD,CAAC,AAvBD,IAuBC"} \ No newline at end of file +{"version":3,"file":"AnalyticsEvents.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsEvents.ts"],"names":[],"mappings":";;AAGA,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC,MAAqB,eAAe;IAClC,YAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM,CACV,MAAkC;QAElC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,SAAkB;QACrC,OAAO,GAAG,eAAe,CAAC,YAAY,GACpC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CACnE,EAAE,CAAC;IACL,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAvBD,kCAuBC"} \ No newline at end of file diff --git a/lib/Typesense/AnalyticsRule.js b/lib/Typesense/AnalyticsRule.js index 7155fe00..21a2646d 100644 --- a/lib/Typesense/AnalyticsRule.js +++ b/lib/Typesense/AnalyticsRule.js @@ -1,30 +1,21 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var AnalyticsRules_1 = tslib_1.__importDefault(require("./AnalyticsRules")); -var AnalyticsRule = /** @class */ (function () { - function AnalyticsRule(name, apiCall) { +const tslib_1 = require("tslib"); +const AnalyticsRules_1 = tslib_1.__importDefault(require("./AnalyticsRules")); +class AnalyticsRule { + constructor(name, apiCall) { this.name = name; this.apiCall = apiCall; } - AnalyticsRule.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - AnalyticsRule.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - AnalyticsRule.prototype.endpointPath = function () { - return "".concat(AnalyticsRules_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.name)); - }; - return AnalyticsRule; -}()); + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${AnalyticsRules_1.default.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +} exports.default = AnalyticsRule; //# sourceMappingURL=AnalyticsRule.js.map \ No newline at end of file diff --git a/lib/Typesense/AnalyticsRule.js.map b/lib/Typesense/AnalyticsRule.js.map index 215fe372..652604f1 100644 --- a/lib/Typesense/AnalyticsRule.js.map +++ b/lib/Typesense/AnalyticsRule.js.map @@ -1 +1 @@ -{"version":3,"file":"AnalyticsRule.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsRule.ts"],"names":[],"mappings":";;;AACA,4EAA8C;AA+B9C;IACE,uBACU,IAAY,EACZ,OAAgB;QADhB,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,gCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAsB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACnE;IAEK,8BAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAA4B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC5E;IAEO,oCAAY,GAApB;QACE,OAAO,UAAG,wBAAc,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC;IAC3E,CAAC;IACH,oBAAC;AAAD,CAAC,AAjBD,IAiBC"} \ No newline at end of file +{"version":3,"file":"AnalyticsRule.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsRule.ts"],"names":[],"mappings":";;;AACA,8EAA8C;AA+B9C,MAAqB,aAAa;IAChC,YACU,IAAY,EACZ,OAAgB;QADhB,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAsB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAA4B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7E,CAAC;IAEO,YAAY;QAClB,OAAO,GAAG,wBAAc,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3E,CAAC;CACF;AAjBD,gCAiBC"} \ No newline at end of file diff --git a/lib/Typesense/AnalyticsRules.js b/lib/Typesense/AnalyticsRules.js index a4d8b9d4..36f6259e 100644 --- a/lib/Typesense/AnalyticsRules.js +++ b/lib/Typesense/AnalyticsRules.js @@ -1,37 +1,23 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/analytics/rules"; -var AnalyticsRules = /** @class */ (function () { - function AnalyticsRules(apiCall) { +const RESOURCEPATH = "/analytics/rules"; +class AnalyticsRules { + constructor(apiCall) { this.apiCall = apiCall; this.apiCall = apiCall; } - AnalyticsRules.prototype.upsert = function (name, params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(name), params)]; - }); - }); - }; - AnalyticsRules.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - AnalyticsRules.prototype.endpointPath = function (operation) { - return "".concat(AnalyticsRules.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(AnalyticsRules, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return AnalyticsRules; -}()); + async upsert(name, params) { + return this.apiCall.put(this.endpointPath(name), params); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${AnalyticsRules.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = AnalyticsRules; //# sourceMappingURL=AnalyticsRules.js.map \ No newline at end of file diff --git a/lib/Typesense/AnalyticsRules.js.map b/lib/Typesense/AnalyticsRules.js.map index b18a8b68..c31c3637 100644 --- a/lib/Typesense/AnalyticsRules.js.map +++ b/lib/Typesense/AnalyticsRules.js.map @@ -1 +1 @@ -{"version":3,"file":"AnalyticsRules.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsRules.ts"],"names":[],"mappings":";;;AAUA,IAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC;IACE,wBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,+BAAM,GAAZ,UACE,IAAY,EACZ,MAAiC;;;gBAEjC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EACvB,MAAM,CACP,EAAC;;;KACH;IAEK,iCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA+B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC5E;IAEO,qCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,cAAc,CAAC,YAAY,SACnC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,8BAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,qBAAC;AAAD,CAAC,AA5BD,IA4BC"} \ No newline at end of file +{"version":3,"file":"AnalyticsRules.js","sourceRoot":"","sources":["../../src/Typesense/AnalyticsRules.ts"],"names":[],"mappings":";;AAUA,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC,MAAqB,cAAc;IACjC,YAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM,CACV,IAAY,EACZ,MAAiC;QAEjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EACvB,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA+B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7E,CAAC;IAEO,YAAY,CAAC,SAAkB;QACrC,OAAO,GAAG,cAAc,CAAC,YAAY,GACnC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CACnE,EAAE,CAAC;IACL,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AA5BD,iCA4BC"} \ No newline at end of file diff --git a/lib/Typesense/ApiCall.js b/lib/Typesense/ApiCall.js index 248828d3..5f1b4347 100644 --- a/lib/Typesense/ApiCall.js +++ b/lib/Typesense/ApiCall.js @@ -1,19 +1,19 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var axios_1 = tslib_1.__importDefault(require("axios")); -var http_1 = require("http"); -var https_1 = require("https"); -var Errors_1 = require("./Errors"); -var TypesenseError_1 = tslib_1.__importDefault(require("./Errors/TypesenseError")); -var APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; -var HEALTHY = true; -var UNHEALTHY = false; -var isNodeJSEnvironment = typeof process !== "undefined" && +const tslib_1 = require("tslib"); +const axios_1 = tslib_1.__importDefault(require("axios")); +const http_1 = require("http"); +const https_1 = require("https"); +const Errors_1 = require("./Errors"); +const TypesenseError_1 = tslib_1.__importDefault(require("./Errors/TypesenseError")); +const APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; +const HEALTHY = true; +const UNHEALTHY = false; +const isNodeJSEnvironment = typeof process !== "undefined" && process.versions != null && process.versions.node != null; -var ApiCall = /** @class */ (function () { - function ApiCall(configuration) { +class ApiCall { + constructor(configuration) { this.configuration = configuration; this.apiKey = this.configuration.apiKey; this.nodes = @@ -35,348 +35,274 @@ var ApiCall = /** @class */ (function () { this.initializeMetadataForNodes(); this.currentNodeIndex = -1; } - ApiCall.prototype.get = function (endpoint_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, queryParameters, _a) { - if (queryParameters === void 0) { queryParameters = {}; } - var _b = _a === void 0 ? {} : _a, _c = _b.abortSignal, abortSignal = _c === void 0 ? null : _c, _d = _b.responseType, responseType = _d === void 0 ? undefined : _d; - return tslib_1.__generator(this, function (_e) { - return [2 /*return*/, this.performRequest("get", endpoint, { - queryParameters: queryParameters, - abortSignal: abortSignal, - responseType: responseType, - })]; - }); + async get(endpoint, queryParameters = {}, { abortSignal = null, responseType = undefined, } = {}) { + return this.performRequest("get", endpoint, { + queryParameters, + abortSignal, + responseType, }); - }; - ApiCall.prototype.delete = function (endpoint_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, queryParameters) { - if (queryParameters === void 0) { queryParameters = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.performRequest("delete", endpoint, { queryParameters: queryParameters })]; - }); - }); - }; - ApiCall.prototype.post = function (endpoint_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, bodyParameters, queryParameters, additionalHeaders) { - if (bodyParameters === void 0) { bodyParameters = {}; } - if (queryParameters === void 0) { queryParameters = {}; } - if (additionalHeaders === void 0) { additionalHeaders = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.performRequest("post", endpoint, { - queryParameters: queryParameters, - bodyParameters: bodyParameters, - additionalHeaders: additionalHeaders, - })]; - }); + } + async delete(endpoint, queryParameters = {}) { + return this.performRequest("delete", endpoint, { queryParameters }); + } + async post(endpoint, bodyParameters = {}, queryParameters = {}, additionalHeaders = {}) { + return this.performRequest("post", endpoint, { + queryParameters, + bodyParameters, + additionalHeaders, }); - }; - ApiCall.prototype.put = function (endpoint_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, bodyParameters, queryParameters) { - if (bodyParameters === void 0) { bodyParameters = {}; } - if (queryParameters === void 0) { queryParameters = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.performRequest("put", endpoint, { - queryParameters: queryParameters, - bodyParameters: bodyParameters, - })]; - }); + } + async put(endpoint, bodyParameters = {}, queryParameters = {}) { + return this.performRequest("put", endpoint, { + queryParameters, + bodyParameters, }); - }; - ApiCall.prototype.patch = function (endpoint_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (endpoint, bodyParameters, queryParameters) { - if (bodyParameters === void 0) { bodyParameters = {}; } - if (queryParameters === void 0) { queryParameters = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.performRequest("patch", endpoint, { - queryParameters: queryParameters, - bodyParameters: bodyParameters, - })]; - }); + } + async patch(endpoint, bodyParameters = {}, queryParameters = {}) { + return this.performRequest("patch", endpoint, { + queryParameters, + bodyParameters, }); - }; - ApiCall.prototype.getAdapter = function () { + } + getAdapter() { if (!this.configuration.axiosAdapter) return undefined; if (typeof this.configuration.axiosAdapter === "function") return this.configuration.axiosAdapter; - var isCloudflareWorkers = typeof navigator !== "undefined" && + const isCloudflareWorkers = typeof navigator !== "undefined" && navigator.userAgent === "Cloudflare-Workers"; return isCloudflareWorkers ? axios_1.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis) : axios_1.default.getAdapter(this.configuration.axiosAdapter); - }; - ApiCall.prototype.performRequest = function (requestType_1, endpoint_1, _a) { - return tslib_1.__awaiter(this, arguments, void 0, function (requestType, endpoint, _b) { - var requestNumber, lastException, wasAborted, _loop_1, this_1, numTries, state_1; - var _c, _d, _e, _f; - var _g = _b.queryParameters, queryParameters = _g === void 0 ? null : _g, _h = _b.bodyParameters, bodyParameters = _h === void 0 ? null : _h, _j = _b.additionalHeaders, additionalHeaders = _j === void 0 ? {} : _j, _k = _b.abortSignal, abortSignal = _k === void 0 ? null : _k, _l = _b.responseType, responseType = _l === void 0 ? undefined : _l, _m = _b.skipConnectionTimeout, skipConnectionTimeout = _m === void 0 ? false : _m, _o = _b.enableKeepAlive, enableKeepAlive = _o === void 0 ? undefined : _o; - return tslib_1.__generator(this, function (_p) { - switch (_p.label) { - case 0: - this.configuration.validate(); - requestNumber = Date.now(); - wasAborted = false; - this.logger.debug("Request #".concat(requestNumber, ": Performing ").concat(requestType.toUpperCase(), " request: ").concat(endpoint)); - _loop_1 = function (numTries) { - var node, abortListener, requestOptions, cancelToken, source_1, response, error_1; - return tslib_1.__generator(this, function (_q) { - switch (_q.label) { - case 0: - node = this_1.getNextNode(requestNumber); - this_1.logger.debug("Request #".concat(requestNumber, ": Attempting ").concat(requestType.toUpperCase(), " request Try #").concat(numTries, " to Node ").concat(node.index)); - if (abortSignal && abortSignal.aborted) { - return [2 /*return*/, { value: Promise.reject(new Error("Request aborted by caller.")) }]; - } - abortListener = void 0; - _q.label = 1; - case 1: - _q.trys.push([1, 3, 5, 6]); - requestOptions = { - adapter: this_1.getAdapter(), - method: requestType, - url: this_1.uriFor(endpoint, node), - headers: Object.assign({}, this_1.defaultHeaders(), additionalHeaders, this_1.additionalUserHeaders), - maxContentLength: Infinity, - maxBodyLength: Infinity, - responseType: responseType, - validateStatus: function (status) { - /* Override default validateStatus, which only considers 2xx a success. - In our case, if the server returns any HTTP code, we will handle it below. - We do this to be able to raise custom errors based on response code. - */ - return status > 0; - }, - transformResponse: [ - function (data, headers) { - var transformedData = data; - if (headers !== undefined && - typeof data === "string" && - headers["content-type"] && - headers["content-type"].startsWith("application/json")) { - transformedData = JSON.parse(data); - } - return transformedData; - }, - ], - }; - if (skipConnectionTimeout !== true) { - requestOptions.timeout = this_1.connectionTimeoutSeconds * 1000; - } - if (queryParameters && Object.keys(queryParameters).length !== 0) { - requestOptions.params = queryParameters; - } - if (this_1.sendApiKeyAsQueryParam) { - requestOptions.params = requestOptions.params || {}; - requestOptions.params["x-typesense-api-key"] = this_1.apiKey; - } - if (this_1.configuration.httpAgent) { - this_1.logger.debug("Request #".concat(requestNumber, ": Using custom httpAgent")); - requestOptions.httpAgent = this_1.configuration.httpAgent; - } - else if (enableKeepAlive === true) { - if (!isNodeJSEnvironment) { - this_1.logger.warn("Request #".concat(requestNumber, ": Cannot use custom httpAgent in a browser environment to enable keepAlive")); - } - else { - this_1.logger.debug("Request #".concat(requestNumber, ": Enabling KeepAlive")); - requestOptions.httpAgent = new http_1.Agent({ keepAlive: true }); - } - } - if (this_1.configuration.httpsAgent) { - this_1.logger.debug("Request #".concat(requestNumber, ": Using custom httpsAgent")); - requestOptions.httpsAgent = this_1.configuration.httpsAgent; - } - else if (enableKeepAlive === true) { - if (!isNodeJSEnvironment) { - this_1.logger.warn("Request #".concat(requestNumber, ": Cannot use custom httpAgent in a browser environment to enable keepAlive")); - } - else { - this_1.logger.debug("Request #".concat(requestNumber, ": Enabling keepAlive")); - requestOptions.httpsAgent = new https_1.Agent({ keepAlive: true }); - } - } - if (this_1.configuration.paramsSerializer) { - this_1.logger.debug("Request #".concat(requestNumber, ": Using custom paramsSerializer")); - requestOptions.paramsSerializer = this_1.configuration.paramsSerializer; - } - if (bodyParameters && - ((typeof bodyParameters === "string" && - bodyParameters.length !== 0) || - (typeof bodyParameters === "object" && - Object.keys(bodyParameters).length !== 0))) { - requestOptions.data = bodyParameters; - } - // Translate from user-provided AbortController to the Axios request cancel mechanism. - if (abortSignal) { - cancelToken = axios_1.default.CancelToken; - source_1 = cancelToken.source(); - abortListener = function () { - wasAborted = true; - source_1.cancel(); - }; - abortSignal.addEventListener("abort", abortListener); - requestOptions.cancelToken = source_1.token; - } - return [4 /*yield*/, (0, axios_1.default)(requestOptions)]; - case 2: - response = _q.sent(); - if (response.status >= 1 && response.status <= 499) { - // Treat any status code > 0 and < 500 to be an indication that node is healthy - // We exclude 0 since some clients return 0 when request fails - this_1.setNodeHealthcheck(node, HEALTHY); - } - this_1.logger.debug("Request #".concat(requestNumber, ": Request to Node ").concat(node.index, " was made. Response Code was ").concat(response.status, ".")); - if (response.status >= 200 && response.status < 300) { - return [2 /*return*/, { value: Promise.resolve(response.data) }]; - } - else if (response.status < 500) { - return [2 /*return*/, { value: Promise.reject(this_1.customErrorForResponse(response, (_c = response.data) === null || _c === void 0 ? void 0 : _c.message, requestOptions.data)) }]; - } - else { - // Retry all other HTTP errors (HTTPStatus > 500) - // This will get caught by the catch block below - throw this_1.customErrorForResponse(response, (_d = response.data) === null || _d === void 0 ? void 0 : _d.message, requestOptions.data); - } - return [3 /*break*/, 6]; - case 3: - error_1 = _q.sent(); - // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts - if (!wasAborted) { - this_1.setNodeHealthcheck(node, UNHEALTHY); - } - lastException = error_1; - this_1.logger.warn("Request #".concat(requestNumber, ": Request to Node ").concat(node.index, " failed due to \"").concat((_e = error_1 === null || error_1 === void 0 ? void 0 : error_1.code) !== null && _e !== void 0 ? _e : "", " ").concat(error_1.message).concat(error_1.response == null - ? "" - : " - " + JSON.stringify((_f = error_1.response) === null || _f === void 0 ? void 0 : _f.data), "\"")); - // this.logger.debug(error.stack) - if (wasAborted) { - return [2 /*return*/, { value: Promise.reject(new Error("Request aborted by caller.")) }]; - } - if (numTries < this_1.numRetriesPerRequest + 1) { - this_1.logger.warn("Request #".concat(requestNumber, ": Sleeping for ").concat(this_1.retryIntervalSeconds, "s and then retrying request...")); - } - return [4 /*yield*/, this_1.timer(this_1.retryIntervalSeconds)]; - case 4: - _q.sent(); - return [3 /*break*/, 6]; - case 5: - if (abortSignal && abortListener) { - abortSignal.removeEventListener("abort", abortListener); - } - return [7 /*endfinally*/]; - case 6: return [2 /*return*/]; - } - }); - }; - this_1 = this; - numTries = 1; - _p.label = 1; - case 1: - if (!(numTries <= this.numRetriesPerRequest + 1)) return [3 /*break*/, 4]; - return [5 /*yield**/, _loop_1(numTries)]; - case 2: - state_1 = _p.sent(); - if (typeof state_1 === "object") - return [2 /*return*/, state_1.value]; - _p.label = 3; - case 3: - numTries++; - return [3 /*break*/, 1]; - case 4: - this.logger.debug("Request #".concat(requestNumber, ": No retries left. Raising last error")); - return [2 /*return*/, Promise.reject(lastException)]; + } + async performRequest(requestType, endpoint, { queryParameters = null, bodyParameters = null, additionalHeaders = {}, abortSignal = null, responseType = undefined, skipConnectionTimeout = false, enableKeepAlive = undefined, }) { + var _a, _b, _c, _d; + this.configuration.validate(); + const requestNumber = Date.now(); + let lastException; + let wasAborted = false; + this.logger.debug(`Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`); + for (let numTries = 1; numTries <= this.numRetriesPerRequest + 1; numTries++) { + const node = this.getNextNode(requestNumber); + this.logger.debug(`Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${node.index}`); + if (abortSignal && abortSignal.aborted) { + return Promise.reject(new Error("Request aborted by caller.")); + } + let abortListener; + try { + const requestOptions = { + adapter: this.getAdapter(), + method: requestType, + url: this.uriFor(endpoint, node), + headers: Object.assign({}, this.defaultHeaders(), additionalHeaders, this.additionalUserHeaders), + maxContentLength: Infinity, + maxBodyLength: Infinity, + responseType, + validateStatus: (status) => { + /* Override default validateStatus, which only considers 2xx a success. + In our case, if the server returns any HTTP code, we will handle it below. + We do this to be able to raise custom errors based on response code. + */ + return status > 0; + }, + transformResponse: [ + (data, headers) => { + let transformedData = data; + if (headers !== undefined && + typeof data === "string" && + headers["content-type"] && + headers["content-type"].startsWith("application/json")) { + transformedData = JSON.parse(data); + } + return transformedData; + }, + ], + }; + if (skipConnectionTimeout !== true) { + requestOptions.timeout = this.connectionTimeoutSeconds * 1000; } - }); - }); - }; + if (queryParameters && Object.keys(queryParameters).length !== 0) { + requestOptions.params = queryParameters; + } + if (this.sendApiKeyAsQueryParam) { + requestOptions.params = requestOptions.params || {}; + requestOptions.params["x-typesense-api-key"] = this.apiKey; + } + if (this.configuration.httpAgent) { + this.logger.debug(`Request #${requestNumber}: Using custom httpAgent`); + requestOptions.httpAgent = this.configuration.httpAgent; + } + else if (enableKeepAlive === true) { + if (!isNodeJSEnvironment) { + this.logger.warn(`Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`); + } + else { + this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`); + requestOptions.httpAgent = new http_1.Agent({ keepAlive: true }); + } + } + if (this.configuration.httpsAgent) { + this.logger.debug(`Request #${requestNumber}: Using custom httpsAgent`); + requestOptions.httpsAgent = this.configuration.httpsAgent; + } + else if (enableKeepAlive === true) { + if (!isNodeJSEnvironment) { + this.logger.warn(`Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`); + } + else { + this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`); + requestOptions.httpsAgent = new https_1.Agent({ keepAlive: true }); + } + } + if (this.configuration.paramsSerializer) { + this.logger.debug(`Request #${requestNumber}: Using custom paramsSerializer`); + requestOptions.paramsSerializer = this.configuration.paramsSerializer; + } + if (bodyParameters && + ((typeof bodyParameters === "string" && + bodyParameters.length !== 0) || + (typeof bodyParameters === "object" && + Object.keys(bodyParameters).length !== 0))) { + requestOptions.data = bodyParameters; + } + // Translate from user-provided AbortController to the Axios request cancel mechanism. + if (abortSignal) { + const cancelToken = axios_1.default.CancelToken; + const source = cancelToken.source(); + abortListener = () => { + wasAborted = true; + source.cancel(); + }; + abortSignal.addEventListener("abort", abortListener); + requestOptions.cancelToken = source.token; + } + const response = await (0, axios_1.default)(requestOptions); + if (response.status >= 1 && response.status <= 499) { + // Treat any status code > 0 and < 500 to be an indication that node is healthy + // We exclude 0 since some clients return 0 when request fails + this.setNodeHealthcheck(node, HEALTHY); + } + this.logger.debug(`Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`); + if (response.status >= 200 && response.status < 300) { + // If response is 2xx return a resolved promise + return Promise.resolve(response.data); + } + else if (response.status < 500) { + // Next, if response is anything but 5xx, don't retry, return a custom error + return Promise.reject(this.customErrorForResponse(response, (_a = response.data) === null || _a === void 0 ? void 0 : _a.message, requestOptions.data)); + } + else { + // Retry all other HTTP errors (HTTPStatus > 500) + // This will get caught by the catch block below + throw this.customErrorForResponse(response, (_b = response.data) === null || _b === void 0 ? void 0 : _b.message, requestOptions.data); + } + } + catch (error) { + // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts + if (!wasAborted) { + this.setNodeHealthcheck(node, UNHEALTHY); + } + lastException = error; + this.logger.warn(`Request #${requestNumber}: Request to Node ${node.index} failed due to "${(_c = error === null || error === void 0 ? void 0 : error.code) !== null && _c !== void 0 ? _c : ""} ${error.message}${error.response == null + ? "" + : " - " + JSON.stringify((_d = error.response) === null || _d === void 0 ? void 0 : _d.data)}"`); + // this.logger.debug(error.stack) + if (wasAborted) { + return Promise.reject(new Error("Request aborted by caller.")); + } + if (numTries < this.numRetriesPerRequest + 1) { + this.logger.warn(`Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`); + } + await this.timer(this.retryIntervalSeconds); + } + finally { + if (abortSignal && abortListener) { + abortSignal.removeEventListener("abort", abortListener); + } + } + } + this.logger.debug(`Request #${requestNumber}: No retries left. Raising last error`); + return Promise.reject(lastException); + } // Attempts to find the next healthy node, looping through the list of nodes once. // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy // so we can try the request for good measure, in case that node has become healthy since - ApiCall.prototype.getNextNode = function (requestNumber) { - if (requestNumber === void 0) { requestNumber = 0; } + getNextNode(requestNumber = 0) { // Check if nearestNode is set and is healthy, if so return it if (this.nearestNode != null) { - this.logger.debug("Request #".concat(requestNumber, ": Nodes Health: Node ").concat(this.nearestNode.index, " is ").concat(this.nearestNode.isHealthy === true ? "Healthy" : "Unhealthy")); + this.logger.debug(`Request #${requestNumber}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy === true ? "Healthy" : "Unhealthy"}`); if (this.nearestNode.isHealthy === true || this.nodeDueForHealthcheck(this.nearestNode, requestNumber)) { - this.logger.debug("Request #".concat(requestNumber, ": Updated current node to Node ").concat(this.nearestNode.index)); + this.logger.debug(`Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`); return this.nearestNode; } - this.logger.debug("Request #".concat(requestNumber, ": Falling back to individual nodes")); + this.logger.debug(`Request #${requestNumber}: Falling back to individual nodes`); } // Fallback to nodes as usual - this.logger.debug("Request #".concat(requestNumber, ": Nodes Health: ").concat(this.nodes - .map(function (node) { - return "Node ".concat(node.index, " is ").concat(node.isHealthy === true ? "Healthy" : "Unhealthy"); - }) - .join(" || "))); - var candidateNode = this.nodes[0]; - for (var i = 0; i <= this.nodes.length; i++) { + this.logger.debug(`Request #${requestNumber}: Nodes Health: ${this.nodes + .map((node) => `Node ${node.index} is ${node.isHealthy === true ? "Healthy" : "Unhealthy"}`) + .join(" || ")}`); + let candidateNode = this.nodes[0]; + for (let i = 0; i <= this.nodes.length; i++) { this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length; candidateNode = this.nodes[this.currentNodeIndex]; if (candidateNode.isHealthy === true || this.nodeDueForHealthcheck(candidateNode, requestNumber)) { - this.logger.debug("Request #".concat(requestNumber, ": Updated current node to Node ").concat(candidateNode.index)); + this.logger.debug(`Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`); return candidateNode; } } // None of the nodes are marked healthy, but some of them could have become healthy since last health check. // So we will just return the next node. - this.logger.debug("Request #".concat(requestNumber, ": No healthy nodes were found. Returning the next node, Node ").concat(candidateNode.index)); + this.logger.debug(`Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`); return candidateNode; - }; - ApiCall.prototype.nodeDueForHealthcheck = function (node, requestNumber) { - if (requestNumber === void 0) { requestNumber = 0; } - var isDueForHealthcheck = Date.now() - node.lastAccessTimestamp > + } + nodeDueForHealthcheck(node, requestNumber = 0) { + const isDueForHealthcheck = Date.now() - node.lastAccessTimestamp > this.healthcheckIntervalSeconds * 1000; if (isDueForHealthcheck) { - this.logger.debug("Request #".concat(requestNumber, ": Node ").concat(node.index, " has exceeded healtcheckIntervalSeconds of ").concat(this.healthcheckIntervalSeconds, ". Adding it back into rotation.")); + this.logger.debug(`Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`); } return isDueForHealthcheck; - }; - ApiCall.prototype.initializeMetadataForNodes = function () { - var _this = this; + } + initializeMetadataForNodes() { if (this.nearestNode != null) { this.nearestNode.index = "nearestNode"; this.setNodeHealthcheck(this.nearestNode, HEALTHY); } - this.nodes.forEach(function (node, i) { + this.nodes.forEach((node, i) => { node.index = i; - _this.setNodeHealthcheck(node, HEALTHY); + this.setNodeHealthcheck(node, HEALTHY); }); - }; - ApiCall.prototype.setNodeHealthcheck = function (node, isHealthy) { + } + setNodeHealthcheck(node, isHealthy) { node.isHealthy = isHealthy; node.lastAccessTimestamp = Date.now(); - }; - ApiCall.prototype.uriFor = function (endpoint, node) { + } + uriFor(endpoint, node) { if (node.url != null) { - return "".concat(node.url).concat(endpoint); + return `${node.url}${endpoint}`; } - return "".concat(node.protocol, "://").concat(node.host, ":").concat(node.port).concat(node.path).concat(endpoint); - }; - ApiCall.prototype.defaultHeaders = function () { - var defaultHeaders = {}; + return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`; + } + defaultHeaders() { + const defaultHeaders = {}; if (!this.sendApiKeyAsQueryParam) { defaultHeaders[APIKEYHEADERNAME] = this.apiKey; } defaultHeaders["Content-Type"] = "application/json"; return defaultHeaders; - }; - ApiCall.prototype.timer = function (seconds) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, seconds * 1000); })]; - }); - }); - }; - ApiCall.prototype.customErrorForResponse = function (response, messageFromServer, httpBody) { - var errorMessage = "Request failed with HTTP code ".concat(response.status); + } + async timer(seconds) { + return new Promise((resolve) => setTimeout(resolve, seconds * 1000)); + } + customErrorForResponse(response, messageFromServer, httpBody) { + let errorMessage = `Request failed with HTTP code ${response.status}`; if (typeof messageFromServer === "string" && messageFromServer.trim() !== "") { - errorMessage += " | Server said: ".concat(messageFromServer); + errorMessage += ` | Server said: ${messageFromServer}`; } - var error = new TypesenseError_1.default(errorMessage, httpBody, response.status); + let error = new TypesenseError_1.default(errorMessage, httpBody, response.status); if (response.status === 400) { error = new Errors_1.RequestMalformed(errorMessage); } @@ -399,8 +325,7 @@ var ApiCall = /** @class */ (function () { error = new Errors_1.HTTPError(errorMessage); } return error; - }; - return ApiCall; -}()); + } +} exports.default = ApiCall; //# sourceMappingURL=ApiCall.js.map \ No newline at end of file diff --git a/lib/Typesense/ApiCall.js.map b/lib/Typesense/ApiCall.js.map index 0ef7fe16..8a444644 100644 --- a/lib/Typesense/ApiCall.js.map +++ b/lib/Typesense/ApiCall.js.map @@ -1 +1 @@ -{"version":3,"file":"ApiCall.js","sourceRoot":"","sources":["../../src/Typesense/ApiCall.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ApiCall.js","sourceRoot":"","sources":["../../src/Typesense/ApiCall.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Client.js b/lib/Typesense/Client.js index 1d428892..8f343022 100644 --- a/lib/Typesense/Client.js +++ b/lib/Typesense/Client.js @@ -1,31 +1,31 @@ "use strict"; /* eslint-disable no-dupe-class-members */ Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Configuration_1 = tslib_1.__importDefault(require("./Configuration")); -var ApiCall_1 = tslib_1.__importDefault(require("./ApiCall")); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var Collection_1 = tslib_1.__importDefault(require("./Collection")); -var Aliases_1 = tslib_1.__importDefault(require("./Aliases")); -var Alias_1 = tslib_1.__importDefault(require("./Alias")); -var Keys_1 = tslib_1.__importDefault(require("./Keys")); -var Key_1 = tslib_1.__importDefault(require("./Key")); -var Debug_1 = tslib_1.__importDefault(require("./Debug")); -var Metrics_1 = tslib_1.__importDefault(require("./Metrics")); -var Stats_1 = tslib_1.__importDefault(require("./Stats")); -var Health_1 = tslib_1.__importDefault(require("./Health")); -var Operations_1 = tslib_1.__importDefault(require("./Operations")); -var MultiSearch_1 = tslib_1.__importDefault(require("./MultiSearch")); -var Presets_1 = tslib_1.__importDefault(require("./Presets")); -var Preset_1 = tslib_1.__importDefault(require("./Preset")); -var Analytics_1 = tslib_1.__importDefault(require("./Analytics")); -var Stopwords_1 = tslib_1.__importDefault(require("./Stopwords")); -var Stopword_1 = tslib_1.__importDefault(require("./Stopword")); -var Conversations_1 = tslib_1.__importDefault(require("./Conversations")); -var Conversation_1 = tslib_1.__importDefault(require("./Conversation")); -var Stemming_1 = tslib_1.__importDefault(require("./Stemming")); -var Client = /** @class */ (function () { - function Client(options) { +const tslib_1 = require("tslib"); +const Configuration_1 = tslib_1.__importDefault(require("./Configuration")); +const ApiCall_1 = tslib_1.__importDefault(require("./ApiCall")); +const Collections_1 = tslib_1.__importDefault(require("./Collections")); +const Collection_1 = tslib_1.__importDefault(require("./Collection")); +const Aliases_1 = tslib_1.__importDefault(require("./Aliases")); +const Alias_1 = tslib_1.__importDefault(require("./Alias")); +const Keys_1 = tslib_1.__importDefault(require("./Keys")); +const Key_1 = tslib_1.__importDefault(require("./Key")); +const Debug_1 = tslib_1.__importDefault(require("./Debug")); +const Metrics_1 = tslib_1.__importDefault(require("./Metrics")); +const Stats_1 = tslib_1.__importDefault(require("./Stats")); +const Health_1 = tslib_1.__importDefault(require("./Health")); +const Operations_1 = tslib_1.__importDefault(require("./Operations")); +const MultiSearch_1 = tslib_1.__importDefault(require("./MultiSearch")); +const Presets_1 = tslib_1.__importDefault(require("./Presets")); +const Preset_1 = tslib_1.__importDefault(require("./Preset")); +const Analytics_1 = tslib_1.__importDefault(require("./Analytics")); +const Stopwords_1 = tslib_1.__importDefault(require("./Stopwords")); +const Stopword_1 = tslib_1.__importDefault(require("./Stopword")); +const Conversations_1 = tslib_1.__importDefault(require("./Conversations")); +const Conversation_1 = tslib_1.__importDefault(require("./Conversation")); +const Stemming_1 = tslib_1.__importDefault(require("./Stemming")); +class Client { + constructor(options) { var _a; options.sendApiKeyAsQueryParam = (_a = options.sendApiKeyAsQueryParam) !== null && _a !== void 0 ? _a : false; this.configuration = new Configuration_1.default(options); @@ -51,7 +51,7 @@ var Client = /** @class */ (function () { this._conversations = new Conversations_1.default(this.apiCall); this.individualConversations = {}; } - Client.prototype.collections = function (collectionName) { + collections(collectionName) { if (collectionName === undefined) { return this._collections; } @@ -61,8 +61,8 @@ var Client = /** @class */ (function () { } return this.individualCollections[collectionName]; } - }; - Client.prototype.aliases = function (aliasName) { + } + aliases(aliasName) { if (aliasName === undefined) { return this._aliases; } @@ -72,8 +72,8 @@ var Client = /** @class */ (function () { } return this.individualAliases[aliasName]; } - }; - Client.prototype.keys = function (id) { + } + keys(id) { if (id === undefined) { return this._keys; } @@ -83,8 +83,8 @@ var Client = /** @class */ (function () { } return this.individualKeys[id]; } - }; - Client.prototype.presets = function (id) { + } + presets(id) { if (id === undefined) { return this._presets; } @@ -94,8 +94,8 @@ var Client = /** @class */ (function () { } return this.individualPresets[id]; } - }; - Client.prototype.stopwords = function (id) { + } + stopwords(id) { if (id === undefined) { return this._stopwords; } @@ -105,8 +105,8 @@ var Client = /** @class */ (function () { } return this.individualStopwords[id]; } - }; - Client.prototype.conversations = function (id) { + } + conversations(id) { if (id === undefined) { return this._conversations; } @@ -116,8 +116,7 @@ var Client = /** @class */ (function () { } return this.individualConversations[id]; } - }; - return Client; -}()); + } +} exports.default = Client; //# sourceMappingURL=Client.js.map \ No newline at end of file diff --git a/lib/Typesense/Client.js.map b/lib/Typesense/Client.js.map index bdccd4aa..c1546f15 100644 --- a/lib/Typesense/Client.js.map +++ b/lib/Typesense/Client.js.map @@ -1 +1 @@ -{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../src/Typesense/Client.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../src/Typesense/Client.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Collection.js b/lib/Typesense/Collection.js index 92c6b063..d79a3959 100644 --- a/lib/Typesense/Collection.js +++ b/lib/Typesense/Collection.js @@ -1,16 +1,16 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var Documents_1 = tslib_1.__importDefault(require("./Documents")); -var Errors_1 = require("./Errors"); -var Overrides_1 = tslib_1.__importDefault(require("./Overrides")); -var Override_1 = tslib_1.__importDefault(require("./Override")); -var Synonyms_1 = tslib_1.__importDefault(require("./Synonyms")); -var Synonym_1 = tslib_1.__importDefault(require("./Synonym")); -var Document_1 = require("./Document"); -var Collection = /** @class */ (function () { - function Collection(name, apiCall, configuration) { +const tslib_1 = require("tslib"); +const Collections_1 = tslib_1.__importDefault(require("./Collections")); +const Documents_1 = tslib_1.__importDefault(require("./Documents")); +const Errors_1 = require("./Errors"); +const Overrides_1 = tslib_1.__importDefault(require("./Overrides")); +const Override_1 = tslib_1.__importDefault(require("./Override")); +const Synonyms_1 = tslib_1.__importDefault(require("./Synonyms")); +const Synonym_1 = tslib_1.__importDefault(require("./Synonym")); +const Document_1 = require("./Document"); +class Collection { + constructor(name, apiCall, configuration) { this.name = name; this.apiCall = apiCall; this.configuration = configuration; @@ -24,50 +24,27 @@ var Collection = /** @class */ (function () { this._overrides = new Overrides_1.default(this.name, this.apiCall); this._synonyms = new Synonyms_1.default(this.name, this.apiCall); } - Collection.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Collection.prototype.update = function (schema) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.patch(this.endpointPath(), schema)]; - }); - }); - }; - Collection.prototype.delete = function () { - return tslib_1.__awaiter(this, arguments, void 0, function (options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath(), options)]; - }); - }); - }; - Collection.prototype.exists = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var e_1; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, this.retrieve()]; - case 1: - _a.sent(); - return [2 /*return*/, true]; - case 2: - e_1 = _a.sent(); - if (e_1 instanceof Errors_1.ObjectNotFound) - return [2 /*return*/, false]; - throw e_1; - case 3: return [2 /*return*/]; - } - }); - }); - }; - Collection.prototype.documents = function (documentId) { + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async update(schema) { + return this.apiCall.patch(this.endpointPath(), schema); + } + async delete(options = {}) { + return this.apiCall.delete(this.endpointPath(), options); + } + async exists() { + try { + await this.retrieve(); + return true; + } + catch (e) { + if (e instanceof Errors_1.ObjectNotFound) + return false; + throw e; + } + } + documents(documentId) { if (!documentId) { return this._documents; } @@ -77,8 +54,8 @@ var Collection = /** @class */ (function () { } return this.individualDocuments[documentId]; } - }; - Collection.prototype.overrides = function (overrideId) { + } + overrides(overrideId) { if (overrideId === undefined) { return this._overrides; } @@ -88,8 +65,8 @@ var Collection = /** @class */ (function () { } return this.individualOverrides[overrideId]; } - }; - Collection.prototype.synonyms = function (synonymId) { + } + synonyms(synonymId) { if (synonymId === undefined) { return this._synonyms; } @@ -99,11 +76,10 @@ var Collection = /** @class */ (function () { } return this.individualSynonyms[synonymId]; } - }; - Collection.prototype.endpointPath = function () { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.name)); - }; - return Collection; -}()); + } + endpointPath() { + return `${Collections_1.default.RESOURCEPATH}/${encodeURIComponent(this.name)}`; + } +} exports.default = Collection; //# sourceMappingURL=Collection.js.map \ No newline at end of file diff --git a/lib/Typesense/Collection.js.map b/lib/Typesense/Collection.js.map index e22e9a23..565d46ba 100644 --- a/lib/Typesense/Collection.js.map +++ b/lib/Typesense/Collection.js.map @@ -1 +1 @@ -{"version":3,"file":"Collection.js","sourceRoot":"","sources":["../../src/Typesense/Collection.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Collection.js","sourceRoot":"","sources":["../../src/Typesense/Collection.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Collections.js b/lib/Typesense/Collections.js index 05248fe0..13e6ea56 100644 --- a/lib/Typesense/Collections.js +++ b/lib/Typesense/Collections.js @@ -1,35 +1,19 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/collections"; -var Collections = /** @class */ (function () { - function Collections(apiCall) { +const RESOURCEPATH = "/collections"; +class Collections { + constructor(apiCall) { this.apiCall = apiCall; } - Collections.prototype.create = function (schema_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (schema, options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.post(RESOURCEPATH, schema, options)]; - }); - }); - }; - Collections.prototype.retrieve = function () { - return tslib_1.__awaiter(this, arguments, void 0, function (options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH, options)]; - }); - }); - }; - Object.defineProperty(Collections, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Collections; -}()); + async create(schema, options = {}) { + return this.apiCall.post(RESOURCEPATH, schema, options); + } + async retrieve(options = {}) { + return this.apiCall.get(RESOURCEPATH, options); + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = Collections; //# sourceMappingURL=Collections.js.map \ No newline at end of file diff --git a/lib/Typesense/Collections.js.map b/lib/Typesense/Collections.js.map index b55b67d0..f40f7fe2 100644 --- a/lib/Typesense/Collections.js.map +++ b/lib/Typesense/Collections.js.map @@ -1 +1 @@ -{"version":3,"file":"Collections.js","sourceRoot":"","sources":["../../src/Typesense/Collections.ts"],"names":[],"mappings":";;;AAwBA,IAAM,YAAY,GAAG,cAAc,CAAC;AAEpC;IACE,qBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,4BAAM,GAAZ;oEACE,MAA8B,EAC9B,OAAqC;YAArC,wBAAA,EAAA,YAAqC;;gBAErC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAmB,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAC;;;KAC3E;IAEK,8BAAQ,GAAd;oEACE,OAAwC;YAAxC,wBAAA,EAAA,YAAwC;;gBAExC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAqB,YAAY,EAAE,OAAO,CAAC,EAAC;;;KACpE;IAED,sBAAW,2BAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,kBAAC;AAAD,CAAC,AAnBD,IAmBC"} \ No newline at end of file +{"version":3,"file":"Collections.js","sourceRoot":"","sources":["../../src/Typesense/Collections.ts"],"names":[],"mappings":";;AAwBA,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,MAAqB,WAAW;IAC9B,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC,KAAK,CAAC,MAAM,CACV,MAA8B,EAC9B,UAAmC,EAAE;QAErC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAmB,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,UAAsC,EAAE;QAExC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAqB,YAAY,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAnBD,8BAmBC"} \ No newline at end of file diff --git a/lib/Typesense/Configuration.js b/lib/Typesense/Configuration.js index 1cb1151b..50675cd3 100644 --- a/lib/Typesense/Configuration.js +++ b/lib/Typesense/Configuration.js @@ -1,16 +1,15 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var loglevel_1 = tslib_1.__importDefault(require("loglevel")); -var Errors_1 = require("./Errors"); -var Configuration = /** @class */ (function () { - function Configuration(options) { - var _this = this; +const tslib_1 = require("tslib"); +const loglevel_1 = tslib_1.__importDefault(require("loglevel")); +const Errors_1 = require("./Errors"); +class Configuration { + constructor(options) { this.nodes = options.nodes || []; this.nodes = this.nodes - .map(function (node) { return _this.setDefaultPathInNode(node); }) - .map(function (node) { return _this.setDefaultPortInNode(node); }) - .map(function (node) { return (tslib_1.__assign({}, node)); }); // Make a deep copy + .map((node) => this.setDefaultPathInNode(node)) + .map((node) => this.setDefaultPortInNode(node)) + .map((node) => ({ ...node })); // Make a deep copy if (options.randomizeNodes == null) { options.randomizeNodes = true; } @@ -44,7 +43,7 @@ var Configuration = /** @class */ (function () { this.showDeprecationWarnings(options); this.validate(); } - Configuration.prototype.validate = function () { + validate() { if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) { throw new Errors_1.MissingConfigurationError("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set"); } @@ -56,25 +55,24 @@ var Configuration = /** @class */ (function () { throw new Errors_1.MissingConfigurationError("Ensure that apiKey is set"); } return true; - }; - Configuration.prototype.validateNodes = function () { - var _this = this; - return this.nodes.some(function (node) { - return _this.isNodeMissingAnyParameters(node); + } + validateNodes() { + return this.nodes.some((node) => { + return this.isNodeMissingAnyParameters(node); }); - }; - Configuration.prototype.isNodeMissingAnyParameters = function (node) { - return (!["protocol", "host", "port", "path"].every(function (key) { + } + isNodeMissingAnyParameters(node) { + return (!["protocol", "host", "port", "path"].every((key) => { return node.hasOwnProperty(key); }) && node["url"] == null); - }; - Configuration.prototype.setDefaultPathInNode = function (node) { + } + setDefaultPathInNode(node) { if (node != null && !node.hasOwnProperty("path")) { node["path"] = ""; } return node; - }; - Configuration.prototype.setDefaultPortInNode = function (node) { + } + setDefaultPortInNode(node) { if (node != null && !node.hasOwnProperty("port") && node.hasOwnProperty("protocol")) { @@ -88,8 +86,8 @@ var Configuration = /** @class */ (function () { } } return node; - }; - Configuration.prototype.showDeprecationWarnings = function (options) { + } + showDeprecationWarnings(options) { if (options.timeoutSeconds) { this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"); } @@ -99,15 +97,13 @@ var Configuration = /** @class */ (function () { if (options.readReplicaNodes) { this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12"); } - }; - Configuration.prototype.shuffleArray = function (array) { - var _a; - for (var i = array.length - 1; i > 0; i--) { - var j = Math.floor(Math.random() * (i + 1)); - _a = [array[j], array[i]], array[i] = _a[0], array[j] = _a[1]; + } + shuffleArray(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; } - }; - return Configuration; -}()); + } +} exports.default = Configuration; //# sourceMappingURL=Configuration.js.map \ No newline at end of file diff --git a/lib/Typesense/Configuration.js.map b/lib/Typesense/Configuration.js.map index e8711f2e..cf5462bd 100644 --- a/lib/Typesense/Configuration.js.map +++ b/lib/Typesense/Configuration.js.map @@ -1 +1 @@ -{"version":3,"file":"Configuration.js","sourceRoot":"","sources":["../../src/Typesense/Configuration.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Configuration.js","sourceRoot":"","sources":["../../src/Typesense/Configuration.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Conversation.js b/lib/Typesense/Conversation.js index b0891aed..649a7a1f 100644 --- a/lib/Typesense/Conversation.js +++ b/lib/Typesense/Conversation.js @@ -1,37 +1,24 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Conversations_1 = tslib_1.__importDefault(require("./Conversations")); -var Conversation = /** @class */ (function () { - function Conversation(id, apiCall) { +const tslib_1 = require("tslib"); +const Conversations_1 = tslib_1.__importDefault(require("./Conversations")); +class Conversation { + constructor(id, apiCall) { this.id = id; this.apiCall = apiCall; } - Conversation.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Conversation.prototype.update = function (params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(), params)]; - }); - }); - }; - Conversation.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Conversation.prototype.endpointPath = function () { - return "".concat(Conversations_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); - }; - return Conversation; -}()); + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async update(params) { + return this.apiCall.put(this.endpointPath(), params); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Conversations_1.default.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +} exports.default = Conversation; //# sourceMappingURL=Conversation.js.map \ No newline at end of file diff --git a/lib/Typesense/Conversation.js.map b/lib/Typesense/Conversation.js.map index 0a9646b7..78454ddd 100644 --- a/lib/Typesense/Conversation.js.map +++ b/lib/Typesense/Conversation.js.map @@ -1 +1 @@ -{"version":3,"file":"Conversation.js","sourceRoot":"","sources":["../../src/Typesense/Conversation.ts"],"names":[],"mappings":";;;AACA,0EAA4C;AAiB5C;IACE,sBACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,+BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACpE;IAEK,6BAAM,GAAZ,UACE,MAAgC;;;gBAEhC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,EAAC;;;KACH;IAEK,6BAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAA2B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC3E;IAEO,mCAAY,GAApB;QACE,OAAO,UAAG,uBAAa,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;IACxE,CAAC;IACH,mBAAC;AAAD,CAAC,AA1BD,IA0BC"} \ No newline at end of file +{"version":3,"file":"Conversation.js","sourceRoot":"","sources":["../../src/Typesense/Conversation.ts"],"names":[],"mappings":";;;AACA,4EAA4C;AAiB5C,MAAqB,YAAY;IAC/B,YACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,MAAM,CACV,MAAgC;QAEhC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAA2B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5E,CAAC;IAEO,YAAY;QAClB,OAAO,GAAG,uBAAa,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACxE,CAAC;CACF;AA1BD,+BA0BC"} \ No newline at end of file diff --git a/lib/Typesense/ConversationModel.js b/lib/Typesense/ConversationModel.js index 2da74c2d..1c8b016c 100644 --- a/lib/Typesense/ConversationModel.js +++ b/lib/Typesense/ConversationModel.js @@ -1,37 +1,24 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var ConversationModels_1 = tslib_1.__importDefault(require("./ConversationModels")); -var ConversationModel = /** @class */ (function () { - function ConversationModel(id, apiCall) { +const tslib_1 = require("tslib"); +const ConversationModels_1 = tslib_1.__importDefault(require("./ConversationModels")); +class ConversationModel { + constructor(id, apiCall) { this.id = id; this.apiCall = apiCall; } - ConversationModel.prototype.update = function (params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(), params)]; - }); - }); - }; - ConversationModel.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - ConversationModel.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - ConversationModel.prototype.endpointPath = function () { - return "".concat(ConversationModels_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); - }; - return ConversationModel; -}()); + async update(params) { + return this.apiCall.put(this.endpointPath(), params); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${ConversationModels_1.default.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +} exports.default = ConversationModel; //# sourceMappingURL=ConversationModel.js.map \ No newline at end of file diff --git a/lib/Typesense/ConversationModel.js.map b/lib/Typesense/ConversationModel.js.map index c9b6a197..84bbbd36 100644 --- a/lib/Typesense/ConversationModel.js.map +++ b/lib/Typesense/ConversationModel.js.map @@ -1 +1 @@ -{"version":3,"file":"ConversationModel.js","sourceRoot":"","sources":["../../src/Typesense/ConversationModel.ts"],"names":[],"mappings":";;;AACA,oFAAsD;AAmBtD;IACE,2BACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,kCAAM,GAAZ,UACE,MAAqC;;;gBAErC,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,EAAC;;;KACH;IAEK,oCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEK,kCAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,IAAI,CAAC,YAAY,EAAE,CACpB,EAAC;;;KACH;IAEO,wCAAY,GAApB;QACE,OAAO,UAAG,4BAAkB,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;IAC7E,CAAC;IACH,wBAAC;AAAD,CAAC,AA5BD,IA4BC"} \ No newline at end of file +{"version":3,"file":"ConversationModel.js","sourceRoot":"","sources":["../../src/Typesense/ConversationModel.ts"],"names":[],"mappings":";;;AACA,sFAAsD;AAmBtD,MAAqB,iBAAiB;IACpC,YACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEJ,KAAK,CAAC,MAAM,CACV,MAAqC;QAErC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,IAAI,CAAC,YAAY,EAAE,CACpB,CAAC;IACJ,CAAC;IAEO,YAAY;QAClB,OAAO,GAAG,4BAAkB,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7E,CAAC;CACF;AA5BD,oCA4BC"} \ No newline at end of file diff --git a/lib/Typesense/ConversationModels.js b/lib/Typesense/ConversationModels.js index 29563fc5..aebbceae 100644 --- a/lib/Typesense/ConversationModels.js +++ b/lib/Typesense/ConversationModels.js @@ -1,37 +1,23 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/conversations/models"; -var ConversationModels = /** @class */ (function () { - function ConversationModels(apiCall) { +const RESOURCEPATH = "/conversations/models"; +class ConversationModels { + constructor(apiCall) { this.apiCall = apiCall; this.apiCall = apiCall; } - ConversationModels.prototype.create = function (params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.post(this.endpointPath(), params)]; - }); - }); - }; - ConversationModels.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - ConversationModels.prototype.endpointPath = function (operation) { - return "".concat(ConversationModels.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(ConversationModels, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return ConversationModels; -}()); + async create(params) { + return this.apiCall.post(this.endpointPath(), params); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${ConversationModels.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = ConversationModels; //# sourceMappingURL=ConversationModels.js.map \ No newline at end of file diff --git a/lib/Typesense/ConversationModels.js.map b/lib/Typesense/ConversationModels.js.map index 3c3b1bc0..6a1f2bd8 100644 --- a/lib/Typesense/ConversationModels.js.map +++ b/lib/Typesense/ConversationModels.js.map @@ -1 +1 @@ -{"version":3,"file":"ConversationModels.js","sourceRoot":"","sources":["../../src/Typesense/ConversationModels.ts"],"names":[],"mappings":";;;AAMA,IAAM,YAAY,GAAG,uBAAuB,CAAC;AAE7C;IACE,4BAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,mCAAM,GAAZ,UACE,MAAqC;;;gBAErC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,EAAC;;;KACH;IAEK,qCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,CACpB,EAAC;;;KACH;IAEO,yCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,kBAAkB,CAAC,YAAY,SACvC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,kCAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,yBAAC;AAAD,CAAC,AA7BD,IA6BC"} \ No newline at end of file +{"version":3,"file":"ConversationModels.js","sourceRoot":"","sources":["../../src/Typesense/ConversationModels.ts"],"names":[],"mappings":";;AAMA,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAE7C,MAAqB,kBAAkB;IACrC,YAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM,CACV,MAAqC;QAErC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,IAAI,CAAC,YAAY,EAAE,EACnB,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,CACpB,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,SAAkB;QACrC,OAAO,GAAG,kBAAkB,CAAC,YAAY,GACvC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CACnE,EAAE,CAAC;IACL,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AA7BD,qCA6BC"} \ No newline at end of file diff --git a/lib/Typesense/Conversations.js b/lib/Typesense/Conversations.js index 69e67c4d..2201ee91 100644 --- a/lib/Typesense/Conversations.js +++ b/lib/Typesense/Conversations.js @@ -1,24 +1,20 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var ConversationModels_1 = tslib_1.__importDefault(require("./ConversationModels")); -var ConversationModel_1 = tslib_1.__importDefault(require("./ConversationModel")); -var RESOURCEPATH = "/conversations"; -var Conversations = /** @class */ (function () { - function Conversations(apiCall) { +const tslib_1 = require("tslib"); +const ConversationModels_1 = tslib_1.__importDefault(require("./ConversationModels")); +const ConversationModel_1 = tslib_1.__importDefault(require("./ConversationModel")); +const RESOURCEPATH = "/conversations"; +class Conversations { + constructor(apiCall) { this.apiCall = apiCall; this.individualConversationModels = {}; this.apiCall = apiCall; this._conversationsModels = new ConversationModels_1.default(this.apiCall); } - Conversations.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - Conversations.prototype.models = function (id) { + async retrieve() { + return this.apiCall.get(RESOURCEPATH); + } + models(id) { if (id === undefined) { return this._conversationsModels; } @@ -28,15 +24,10 @@ var Conversations = /** @class */ (function () { } return this.individualConversationModels[id]; } - }; - Object.defineProperty(Conversations, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Conversations; -}()); + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = Conversations; //# sourceMappingURL=Conversations.js.map \ No newline at end of file diff --git a/lib/Typesense/Conversations.js.map b/lib/Typesense/Conversations.js.map index 899cd545..03e547d3 100644 --- a/lib/Typesense/Conversations.js.map +++ b/lib/Typesense/Conversations.js.map @@ -1 +1 @@ -{"version":3,"file":"Conversations.js","sourceRoot":"","sources":["../../src/Typesense/Conversations.ts"],"names":[],"mappings":";;;AACA,oFAAsD;AACtD,kFAAoD;AAGpD,IAAM,YAAY,GAAG,gBAAgB,CAAC;AAMtC;IAOE,uBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAL5B,iCAA4B,GAGzC,EAAE,CAAC;QAGL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,oBAAoB,GAAG,IAAI,4BAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAEK,gCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA8B,YAAY,CAAC,EAAC;;;KACpE;IAID,8BAAM,GAAN,UAAO,EAAW;QAChB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBACxD,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,GAAG,IAAI,2BAAiB,CAC3D,EAAE,EACF,IAAI,CAAC,OAAO,CACb,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,sBAAW,6BAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,oBAAC;AAAD,CAAC,AAnCD,IAmCC"} \ No newline at end of file +{"version":3,"file":"Conversations.js","sourceRoot":"","sources":["../../src/Typesense/Conversations.ts"],"names":[],"mappings":";;;AACA,sFAAsD;AACtD,oFAAoD;AAGpD,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAMtC,MAAqB,aAAa;IAOhC,YAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAL5B,iCAA4B,GAGzC,EAAE,CAAC;QAGL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,oBAAoB,GAAG,IAAI,4BAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA8B,YAAY,CAAC,CAAC;IACrE,CAAC;IAID,MAAM,CAAC,EAAW;QAChB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBACxD,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,GAAG,IAAI,2BAAiB,CAC3D,EAAE,EACF,IAAI,CAAC,OAAO,CACb,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAnCD,gCAmCC"} \ No newline at end of file diff --git a/lib/Typesense/Debug.js b/lib/Typesense/Debug.js index fa525663..3b3867ef 100644 --- a/lib/Typesense/Debug.js +++ b/lib/Typesense/Debug.js @@ -1,19 +1,13 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/debug"; -var Debug = /** @class */ (function () { - function Debug(apiCall) { +const RESOURCEPATH = "/debug"; +class Debug { + constructor(apiCall) { this.apiCall = apiCall; } - Debug.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - return Debug; -}()); + async retrieve() { + return this.apiCall.get(RESOURCEPATH); + } +} exports.default = Debug; //# sourceMappingURL=Debug.js.map \ No newline at end of file diff --git a/lib/Typesense/Debug.js.map b/lib/Typesense/Debug.js.map index 30283311..e3f3b683 100644 --- a/lib/Typesense/Debug.js.map +++ b/lib/Typesense/Debug.js.map @@ -1 +1 @@ -{"version":3,"file":"Debug.js","sourceRoot":"","sources":["../../src/Typesense/Debug.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,QAAQ,CAAC;AAO9B;IACE,eAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,wBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAsB,YAAY,CAAC,EAAC;;;KAC5D;IACH,YAAC;AAAD,CAAC,AAND,IAMC"} \ No newline at end of file +{"version":3,"file":"Debug.js","sourceRoot":"","sources":["../../src/Typesense/Debug.ts"],"names":[],"mappings":";;AAEA,MAAM,YAAY,GAAG,QAAQ,CAAC;AAO9B,MAAqB,KAAK;IACxB,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAsB,YAAY,CAAC,CAAC;IAC7D,CAAC;CACF;AAND,wBAMC"} \ No newline at end of file diff --git a/lib/Typesense/Document.js b/lib/Typesense/Document.js index fc7f8f4e..eef199cf 100644 --- a/lib/Typesense/Document.js +++ b/lib/Typesense/Document.js @@ -1,41 +1,27 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Document = void 0; -var tslib_1 = require("tslib"); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var Documents_1 = tslib_1.__importDefault(require("./Documents")); -var Document = /** @class */ (function () { - function Document(collectionName, documentId, apiCall) { +const tslib_1 = require("tslib"); +const Collections_1 = tslib_1.__importDefault(require("./Collections")); +const Documents_1 = tslib_1.__importDefault(require("./Documents")); +class Document { + constructor(collectionName, documentId, apiCall) { this.collectionName = collectionName; this.documentId = documentId; this.apiCall = apiCall; } - Document.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Document.prototype.delete = function (options) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath(), options)]; - }); - }); - }; - Document.prototype.update = function (partialDocument_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (partialDocument, options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.patch(this.endpointPath(), partialDocument, options)]; - }); - }); - }; - Document.prototype.endpointPath = function () { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Documents_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.documentId)); - }; - return Document; -}()); + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete(options) { + return this.apiCall.delete(this.endpointPath(), options); + } + async update(partialDocument, options = {}) { + return this.apiCall.patch(this.endpointPath(), partialDocument, options); + } + endpointPath() { + return `${Collections_1.default.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents_1.default.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`; + } +} exports.Document = Document; //# sourceMappingURL=Document.js.map \ No newline at end of file diff --git a/lib/Typesense/Document.js.map b/lib/Typesense/Document.js.map index d7129738..3da7b4b8 100644 --- a/lib/Typesense/Document.js.map +++ b/lib/Typesense/Document.js.map @@ -1 +1 @@ -{"version":3,"file":"Document.js","sourceRoot":"","sources":["../../src/Typesense/Document.ts"],"names":[],"mappings":";;;;AACA,sEAAwC;AACxC,kEAIqB;AAErB;IACE,kBACU,cAAsB,EACtB,UAAkB,EAClB,OAAgB;QAFhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,2BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAI,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACjD;IAEK,yBAAM,GAAZ,UAAa,OAAqB;;;gBAChC,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAI,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,EAAC;;;KAC7D;IAEK,yBAAM,GAAZ;oEACE,eAA2B,EAC3B,OAAqC;YAArC,wBAAA,EAAA,YAAqC;;gBAErC,sBAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAI,IAAI,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,EAAC;;;KAC7E;IAEO,+BAAY,GAApB;QACE,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAG,mBAAS,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAE,CAAC;IAClJ,CAAC;IACH,eAAC;AAAD,CAAC,AAzBD,IAyBC;AAzBY,4BAAQ"} \ No newline at end of file +{"version":3,"file":"Document.js","sourceRoot":"","sources":["../../src/Typesense/Document.ts"],"names":[],"mappings":";;;;AACA,wEAAwC;AACxC,oEAIqB;AAErB,MAAa,QAAQ;IACnB,YACU,cAAsB,EACtB,UAAkB,EAClB,OAAgB;QAFhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAI,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAqB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAI,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,MAAM,CACV,eAA2B,EAC3B,UAAmC,EAAE;QAErC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAI,IAAI,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;IAEO,YAAY;QAClB,OAAO,GAAG,qBAAW,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,mBAAS,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;IAClJ,CAAC;CACF;AAzBD,4BAyBC"} \ No newline at end of file diff --git a/lib/Typesense/Documents.js b/lib/Typesense/Documents.js index 6c2d572b..282daf25 100644 --- a/lib/Typesense/Documents.js +++ b/lib/Typesense/Documents.js @@ -1,9 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.arrayableParams = void 0; -var tslib_1 = require("tslib"); -var Errors_1 = require("./Errors"); -var SearchOnlyDocuments_1 = require("./SearchOnlyDocuments"); +const Errors_1 = require("./Errors"); +const SearchOnlyDocuments_1 = require("./SearchOnlyDocuments"); exports.arrayableParams = { query_by: "query_by", query_by_weights: "query_by_weights", @@ -21,190 +20,134 @@ exports.arrayableParams = { prefix: "prefix", sort_by: "sort_by", }; -var isNodeJSEnvironment = typeof process !== "undefined" && +const isNodeJSEnvironment = typeof process !== "undefined" && process.versions != null && process.versions.node != null; -var Documents = /** @class */ (function (_super) { - tslib_1.__extends(Documents, _super); - function Documents(collectionName, apiCall, configuration) { - return _super.call(this, collectionName, apiCall, configuration) || this; +class Documents extends SearchOnlyDocuments_1.SearchOnlyDocuments { + constructor(collectionName, apiCall, configuration) { + super(collectionName, apiCall, configuration); } - Documents.prototype.create = function (document_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (document, options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - if (!document) - throw new Error("No document provided"); - return [2 /*return*/, this.apiCall.post(this.endpointPath(), document, options)]; - }); - }); - }; - Documents.prototype.upsert = function (document_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (document, options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - if (!document) - throw new Error("No document provided"); - return [2 /*return*/, this.apiCall.post(this.endpointPath(), document, Object.assign({}, options, { action: "upsert" }))]; - }); - }); - }; - Documents.prototype.update = function (document_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (document, options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - if (!document) - throw new Error("No document provided"); - if (options["filter_by"] != null) { - return [2 /*return*/, this.apiCall.patch(this.endpointPath(), document, Object.assign({}, options))]; - } - else { - return [2 /*return*/, this.apiCall.post(this.endpointPath(), document, Object.assign({}, options, { action: "update" }))]; - } - return [2 /*return*/]; - }); - }); - }; - Documents.prototype.delete = function () { - return tslib_1.__awaiter(this, arguments, void 0, function (query) { - if (query === void 0) { query = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath(), query)]; - }); - }); - }; - Documents.prototype.createMany = function (documents_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (documents, options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"); - return [2 /*return*/, this.import(documents, options)]; - }); - }); - }; - Documents.prototype.import = function (documents_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (documents, options) { - var documentsInJSONLFormat, resultsInJSONLFormat, resultsInJSONFormat, failedItems; - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: - if (Array.isArray(documents)) { - try { - documentsInJSONLFormat = documents - .map(function (document) { return JSON.stringify(document); }) - .join("\n"); - } - catch (error) { - // if rangeerror, throw custom error message - if (error instanceof RangeError && - error.message.includes("Too many properties to enumerate")) { - throw new Error("".concat(error, "\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n ")); - } - // else, throw the non-range error anyways - throw new Error(error); - } - } - else { - documentsInJSONLFormat = documents; - } - return [4 /*yield*/, this.apiCall.performRequest("post", this.endpointPath("import"), { - queryParameters: options, - bodyParameters: documentsInJSONLFormat, - additionalHeaders: { "Content-Type": "text/plain" }, - skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully - enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 - })]; - case 1: - resultsInJSONLFormat = _a.sent(); - if (Array.isArray(documents)) { - resultsInJSONFormat = resultsInJSONLFormat - .split("\n") - .map(function (r) { return JSON.parse(r); }); - failedItems = resultsInJSONFormat.filter(function (r) { return r.success === false; }); - if (failedItems.length > 0) { - throw new Errors_1.ImportError("".concat(resultsInJSONFormat.length - failedItems.length, " documents imported successfully, ").concat(failedItems.length, " documents failed during import. Use `error.importResults` from the raised exception to get a detailed error reason for each document."), resultsInJSONFormat, { - documentsInJSONLFormat: documentsInJSONLFormat, - options: options, - failedItems: failedItems, - successCount: resultsInJSONFormat.length - failedItems.length, - }); - } - else { - return [2 /*return*/, resultsInJSONFormat]; - } - } - else { - return [2 /*return*/, resultsInJSONLFormat]; - } - return [2 /*return*/]; + async create(document, options = {}) { + if (!document) + throw new Error("No document provided"); + return this.apiCall.post(this.endpointPath(), document, options); + } + async upsert(document, options = {}) { + if (!document) + throw new Error("No document provided"); + return this.apiCall.post(this.endpointPath(), document, Object.assign({}, options, { action: "upsert" })); + } + async update(document, options = {}) { + if (!document) + throw new Error("No document provided"); + if (options["filter_by"] != null) { + return this.apiCall.patch(this.endpointPath(), document, Object.assign({}, options)); + } + else { + return this.apiCall.post(this.endpointPath(), document, Object.assign({}, options, { action: "update" })); + } + } + async delete(query = {}) { + return this.apiCall.delete(this.endpointPath(), query); + } + async createMany(documents, options = {}) { + this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"); + return this.import(documents, options); + } + async import(documents, options = {}) { + let documentsInJSONLFormat; + if (Array.isArray(documents)) { + try { + documentsInJSONLFormat = documents + .map((document) => JSON.stringify(document)) + .join("\n"); + } + catch (error) { + // if rangeerror, throw custom error message + if (error instanceof RangeError && + error.message.includes("Too many properties to enumerate")) { + throw new Error(`${error} + It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object + + Please try reducing the number of keys in your document, or using CURL to import your data. + `); } - }); + // else, throw the non-range error anyways + throw new Error(error); + } + } + else { + documentsInJSONLFormat = documents; + } + const resultsInJSONLFormat = await this.apiCall.performRequest("post", this.endpointPath("import"), { + queryParameters: options, + bodyParameters: documentsInJSONLFormat, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully + enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 }); - }; + if (Array.isArray(documents)) { + const resultsInJSONFormat = resultsInJSONLFormat + .split("\n") + .map((r) => JSON.parse(r)); + const failedItems = resultsInJSONFormat.filter((r) => r.success === false); + if (failedItems.length > 0) { + throw new Errors_1.ImportError(`${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, resultsInJSONFormat, { + documentsInJSONLFormat, + options, + failedItems, + successCount: resultsInJSONFormat.length - failedItems.length, + }); + } + else { + return resultsInJSONFormat; + } + } + else { + return resultsInJSONLFormat; + } + } /** * Imports documents from a NodeJS readable stream of JSONL. */ - Documents.prototype.importStream = function (readableStream_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (readableStream, options) { - var resultsInJSONLFormat, resultsInJSONFormat, failedItems; - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.apiCall.performRequest("post", this.endpointPath("import"), { - queryParameters: options, - bodyParameters: readableStream, - additionalHeaders: { "Content-Type": "text/plain" }, - skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully - enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 - })]; - case 1: - resultsInJSONLFormat = _a.sent(); - resultsInJSONFormat = resultsInJSONLFormat - .split("\n") - .map(function (r) { return JSON.parse(r); }); - failedItems = resultsInJSONFormat.filter(function (r) { return r.success === false; }); - if (failedItems.length > 0) { - throw new Errors_1.ImportError("".concat(resultsInJSONFormat.length - failedItems.length, " documents imported successfully, ").concat(failedItems.length, " documents failed during import. Use `error.importResults` from the raised exception to get a detailed error reason for each document."), resultsInJSONFormat, { - documentsInJSONLFormat: readableStream, - options: options, - failedItems: failedItems, - successCount: resultsInJSONFormat.length - failedItems.length, - }); - } - else { - return [2 /*return*/, resultsInJSONFormat]; - } - return [2 /*return*/]; - } - }); + async importStream(readableStream, options = {}) { + const resultsInJSONLFormat = await this.apiCall.performRequest("post", this.endpointPath("import"), { + queryParameters: options, + bodyParameters: readableStream, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully + enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 }); - }; + const resultsInJSONFormat = resultsInJSONLFormat + .split("\n") + .map((r) => JSON.parse(r)); + const failedItems = resultsInJSONFormat.filter((r) => r.success === false); + if (failedItems.length > 0) { + throw new Errors_1.ImportError(`${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, resultsInJSONFormat, { + documentsInJSONLFormat: readableStream, + options, + failedItems, + successCount: resultsInJSONFormat.length - failedItems.length, + }); + } + else { + return resultsInJSONFormat; + } + } /** * Returns a JSONL string for all the documents in this collection */ - Documents.prototype.export = function () { - return tslib_1.__awaiter(this, arguments, void 0, function (options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath("export"), options)]; - }); - }); - }; + async export(options = {}) { + return this.apiCall.get(this.endpointPath("export"), options); + } /** * Returns a NodeJS readable stream of JSONL for all the documents in this collection. */ - Documents.prototype.exportStream = function () { - return tslib_1.__awaiter(this, arguments, void 0, function (options) { - if (options === void 0) { options = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath("export"), options, { - responseType: "stream", - })]; - }); + async exportStream(options = {}) { + return this.apiCall.get(this.endpointPath("export"), options, { + responseType: "stream", }); - }; - return Documents; -}(SearchOnlyDocuments_1.SearchOnlyDocuments)); + } +} exports.default = Documents; //# sourceMappingURL=Documents.js.map \ No newline at end of file diff --git a/lib/Typesense/Documents.js.map b/lib/Typesense/Documents.js.map index d923e1ec..c13d028c 100644 --- a/lib/Typesense/Documents.js.map +++ b/lib/Typesense/Documents.js.map @@ -1 +1 @@ -{"version":3,"file":"Documents.js","sourceRoot":"","sources":["../../src/Typesense/Documents.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Documents.js","sourceRoot":"","sources":["../../src/Typesense/Documents.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/Errors/HTTPError.js b/lib/Typesense/Errors/HTTPError.js index aabc1054..3d93dfbe 100644 --- a/lib/Typesense/Errors/HTTPError.js +++ b/lib/Typesense/Errors/HTTPError.js @@ -1,13 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var HTTPError = /** @class */ (function (_super) { - tslib_1.__extends(HTTPError, _super); - function HTTPError() { - return _super !== null && _super.apply(this, arguments) || this; - } - return HTTPError; -}(TypesenseError_1.default)); +const tslib_1 = require("tslib"); +const TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +class HTTPError extends TypesenseError_1.default { +} exports.default = HTTPError; //# sourceMappingURL=HTTPError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/HTTPError.js.map b/lib/Typesense/Errors/HTTPError.js.map index e9ca4f58..ccb4bbfc 100644 --- a/lib/Typesense/Errors/HTTPError.js.map +++ b/lib/Typesense/Errors/HTTPError.js.map @@ -1 +1 @@ -{"version":3,"file":"HTTPError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/HTTPError.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAuC,qCAAc;IAArD;;IAAuD,CAAC;IAAD,gBAAC;AAAD,CAAC,AAAxD,CAAuC,wBAAc,GAAG"} \ No newline at end of file +{"version":3,"file":"HTTPError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/HTTPError.ts"],"names":[],"mappings":";;;AAAA,8EAA8C;AAE9C,MAAqB,SAAU,SAAQ,wBAAc;CAAG;AAAxD,4BAAwD"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ImportError.js b/lib/Typesense/Errors/ImportError.js index e9f1eaf0..9d78f598 100644 --- a/lib/Typesense/Errors/ImportError.js +++ b/lib/Typesense/Errors/ImportError.js @@ -1,16 +1,13 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var ImportError = /** @class */ (function (_super) { - tslib_1.__extends(ImportError, _super); - function ImportError(message, importResults, payload) { - var _this = _super.call(this, message) || this; - _this.importResults = importResults; - _this.payload = payload; - return _this; +const tslib_1 = require("tslib"); +const TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +class ImportError extends TypesenseError_1.default { + constructor(message, importResults, payload) { + super(message); + this.importResults = importResults; + this.payload = payload; } - return ImportError; -}(TypesenseError_1.default)); +} exports.default = ImportError; //# sourceMappingURL=ImportError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ImportError.js.map b/lib/Typesense/Errors/ImportError.js.map index d0a8fecf..b5a49ba8 100644 --- a/lib/Typesense/Errors/ImportError.js.map +++ b/lib/Typesense/Errors/ImportError.js.map @@ -1 +1 @@ -{"version":3,"file":"ImportError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ImportError.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAW9C;IAAyC,uCAAc;IAGrD,qBACE,OAAe,EACf,aAA+B,EAC/B,OAA2B;QAE3B,YAAA,MAAK,YAAC,OAAO,CAAC,SAAC;QACf,KAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;;IACzB,CAAC;IACH,kBAAC;AAAD,CAAC,AAZD,CAAyC,wBAAc,GAYtD"} \ No newline at end of file +{"version":3,"file":"ImportError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ImportError.ts"],"names":[],"mappings":";;;AAAA,8EAA8C;AAW9C,MAAqB,WAAY,SAAQ,wBAAc;IAGrD,YACE,OAAe,EACf,aAA+B,EAC/B,OAA2B;QAE3B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAZD,8BAYC"} \ No newline at end of file diff --git a/lib/Typesense/Errors/MissingConfigurationError.js b/lib/Typesense/Errors/MissingConfigurationError.js index 2161b0ac..c59ed41d 100644 --- a/lib/Typesense/Errors/MissingConfigurationError.js +++ b/lib/Typesense/Errors/MissingConfigurationError.js @@ -1,13 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var MissingConfigurationError = /** @class */ (function (_super) { - tslib_1.__extends(MissingConfigurationError, _super); - function MissingConfigurationError() { - return _super !== null && _super.apply(this, arguments) || this; - } - return MissingConfigurationError; -}(TypesenseError_1.default)); +const tslib_1 = require("tslib"); +const TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +class MissingConfigurationError extends TypesenseError_1.default { +} exports.default = MissingConfigurationError; //# sourceMappingURL=MissingConfigurationError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/MissingConfigurationError.js.map b/lib/Typesense/Errors/MissingConfigurationError.js.map index 6e2efa82..950f777b 100644 --- a/lib/Typesense/Errors/MissingConfigurationError.js.map +++ b/lib/Typesense/Errors/MissingConfigurationError.js.map @@ -1 +1 @@ -{"version":3,"file":"MissingConfigurationError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/MissingConfigurationError.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAuD,qDAAc;IAArE;;IAAuE,CAAC;IAAD,gCAAC;AAAD,CAAC,AAAxE,CAAuD,wBAAc,GAAG"} \ No newline at end of file +{"version":3,"file":"MissingConfigurationError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/MissingConfigurationError.ts"],"names":[],"mappings":";;;AAAA,8EAA8C;AAE9C,MAAqB,yBAA0B,SAAQ,wBAAc;CAAG;AAAxE,4CAAwE"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectAlreadyExists.js b/lib/Typesense/Errors/ObjectAlreadyExists.js index 9f0e6381..3029ef78 100644 --- a/lib/Typesense/Errors/ObjectAlreadyExists.js +++ b/lib/Typesense/Errors/ObjectAlreadyExists.js @@ -1,13 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var ObjectAlreadyExists = /** @class */ (function (_super) { - tslib_1.__extends(ObjectAlreadyExists, _super); - function ObjectAlreadyExists() { - return _super !== null && _super.apply(this, arguments) || this; - } - return ObjectAlreadyExists; -}(TypesenseError_1.default)); +const tslib_1 = require("tslib"); +const TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +class ObjectAlreadyExists extends TypesenseError_1.default { +} exports.default = ObjectAlreadyExists; //# sourceMappingURL=ObjectAlreadyExists.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectAlreadyExists.js.map b/lib/Typesense/Errors/ObjectAlreadyExists.js.map index 7e7860b5..c37684ef 100644 --- a/lib/Typesense/Errors/ObjectAlreadyExists.js.map +++ b/lib/Typesense/Errors/ObjectAlreadyExists.js.map @@ -1 +1 @@ -{"version":3,"file":"ObjectAlreadyExists.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ObjectAlreadyExists.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAiD,+CAAc;IAA/D;;IAAiE,CAAC;IAAD,0BAAC;AAAD,CAAC,AAAlE,CAAiD,wBAAc,GAAG"} \ No newline at end of file +{"version":3,"file":"ObjectAlreadyExists.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ObjectAlreadyExists.ts"],"names":[],"mappings":";;;AAAA,8EAA8C;AAE9C,MAAqB,mBAAoB,SAAQ,wBAAc;CAAG;AAAlE,sCAAkE"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectNotFound.js b/lib/Typesense/Errors/ObjectNotFound.js index 9acaab66..4f14cf31 100644 --- a/lib/Typesense/Errors/ObjectNotFound.js +++ b/lib/Typesense/Errors/ObjectNotFound.js @@ -1,13 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var ObjectNotFound = /** @class */ (function (_super) { - tslib_1.__extends(ObjectNotFound, _super); - function ObjectNotFound() { - return _super !== null && _super.apply(this, arguments) || this; - } - return ObjectNotFound; -}(TypesenseError_1.default)); +const tslib_1 = require("tslib"); +const TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +class ObjectNotFound extends TypesenseError_1.default { +} exports.default = ObjectNotFound; //# sourceMappingURL=ObjectNotFound.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectNotFound.js.map b/lib/Typesense/Errors/ObjectNotFound.js.map index e216c403..83f59c26 100644 --- a/lib/Typesense/Errors/ObjectNotFound.js.map +++ b/lib/Typesense/Errors/ObjectNotFound.js.map @@ -1 +1 @@ -{"version":3,"file":"ObjectNotFound.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ObjectNotFound.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAA4C,0CAAc;IAA1D;;IAA4D,CAAC;IAAD,qBAAC;AAAD,CAAC,AAA7D,CAA4C,wBAAc,GAAG"} \ No newline at end of file +{"version":3,"file":"ObjectNotFound.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ObjectNotFound.ts"],"names":[],"mappings":";;;AAAA,8EAA8C;AAE9C,MAAqB,cAAe,SAAQ,wBAAc;CAAG;AAA7D,iCAA6D"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectUnprocessable.js b/lib/Typesense/Errors/ObjectUnprocessable.js index ec3e9866..b5d40e20 100644 --- a/lib/Typesense/Errors/ObjectUnprocessable.js +++ b/lib/Typesense/Errors/ObjectUnprocessable.js @@ -1,13 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var ObjectUnprocessable = /** @class */ (function (_super) { - tslib_1.__extends(ObjectUnprocessable, _super); - function ObjectUnprocessable() { - return _super !== null && _super.apply(this, arguments) || this; - } - return ObjectUnprocessable; -}(TypesenseError_1.default)); +const tslib_1 = require("tslib"); +const TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +class ObjectUnprocessable extends TypesenseError_1.default { +} exports.default = ObjectUnprocessable; //# sourceMappingURL=ObjectUnprocessable.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ObjectUnprocessable.js.map b/lib/Typesense/Errors/ObjectUnprocessable.js.map index 812b7f1c..6a22cccd 100644 --- a/lib/Typesense/Errors/ObjectUnprocessable.js.map +++ b/lib/Typesense/Errors/ObjectUnprocessable.js.map @@ -1 +1 @@ -{"version":3,"file":"ObjectUnprocessable.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ObjectUnprocessable.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAiD,+CAAc;IAA/D;;IAAiE,CAAC;IAAD,0BAAC;AAAD,CAAC,AAAlE,CAAiD,wBAAc,GAAG"} \ No newline at end of file +{"version":3,"file":"ObjectUnprocessable.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ObjectUnprocessable.ts"],"names":[],"mappings":";;;AAAA,8EAA8C;AAE9C,MAAqB,mBAAoB,SAAQ,wBAAc;CAAG;AAAlE,sCAAkE"} \ No newline at end of file diff --git a/lib/Typesense/Errors/RequestMalformed.js b/lib/Typesense/Errors/RequestMalformed.js index 46fb1652..9fffdc02 100644 --- a/lib/Typesense/Errors/RequestMalformed.js +++ b/lib/Typesense/Errors/RequestMalformed.js @@ -1,13 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var RequestMalformed = /** @class */ (function (_super) { - tslib_1.__extends(RequestMalformed, _super); - function RequestMalformed() { - return _super !== null && _super.apply(this, arguments) || this; - } - return RequestMalformed; -}(TypesenseError_1.default)); +const tslib_1 = require("tslib"); +const TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +class RequestMalformed extends TypesenseError_1.default { +} exports.default = RequestMalformed; //# sourceMappingURL=RequestMalformed.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/RequestMalformed.js.map b/lib/Typesense/Errors/RequestMalformed.js.map index 636779b9..22a31571 100644 --- a/lib/Typesense/Errors/RequestMalformed.js.map +++ b/lib/Typesense/Errors/RequestMalformed.js.map @@ -1 +1 @@ -{"version":3,"file":"RequestMalformed.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/RequestMalformed.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAA8C,4CAAc;IAA5D;;IAA8D,CAAC;IAAD,uBAAC;AAAD,CAAC,AAA/D,CAA8C,wBAAc,GAAG"} \ No newline at end of file +{"version":3,"file":"RequestMalformed.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/RequestMalformed.ts"],"names":[],"mappings":";;;AAAA,8EAA8C;AAE9C,MAAqB,gBAAiB,SAAQ,wBAAc;CAAG;AAA/D,mCAA+D"} \ No newline at end of file diff --git a/lib/Typesense/Errors/RequestUnauthorized.js b/lib/Typesense/Errors/RequestUnauthorized.js index ac5f70f9..1a8a1131 100644 --- a/lib/Typesense/Errors/RequestUnauthorized.js +++ b/lib/Typesense/Errors/RequestUnauthorized.js @@ -1,13 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var RequestUnauthorized = /** @class */ (function (_super) { - tslib_1.__extends(RequestUnauthorized, _super); - function RequestUnauthorized() { - return _super !== null && _super.apply(this, arguments) || this; - } - return RequestUnauthorized; -}(TypesenseError_1.default)); +const tslib_1 = require("tslib"); +const TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +class RequestUnauthorized extends TypesenseError_1.default { +} exports.default = RequestUnauthorized; //# sourceMappingURL=RequestUnauthorized.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/RequestUnauthorized.js.map b/lib/Typesense/Errors/RequestUnauthorized.js.map index 8764f799..1df3710e 100644 --- a/lib/Typesense/Errors/RequestUnauthorized.js.map +++ b/lib/Typesense/Errors/RequestUnauthorized.js.map @@ -1 +1 @@ -{"version":3,"file":"RequestUnauthorized.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/RequestUnauthorized.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAiD,+CAAc;IAA/D;;IAAiE,CAAC;IAAD,0BAAC;AAAD,CAAC,AAAlE,CAAiD,wBAAc,GAAG"} \ No newline at end of file +{"version":3,"file":"RequestUnauthorized.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/RequestUnauthorized.ts"],"names":[],"mappings":";;;AAAA,8EAA8C;AAE9C,MAAqB,mBAAoB,SAAQ,wBAAc;CAAG;AAAlE,sCAAkE"} \ No newline at end of file diff --git a/lib/Typesense/Errors/ServerError.js b/lib/Typesense/Errors/ServerError.js index e3bf3f15..024d35fa 100644 --- a/lib/Typesense/Errors/ServerError.js +++ b/lib/Typesense/Errors/ServerError.js @@ -1,13 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); -var ServerError = /** @class */ (function (_super) { - tslib_1.__extends(ServerError, _super); - function ServerError() { - return _super !== null && _super.apply(this, arguments) || this; - } - return ServerError; -}(TypesenseError_1.default)); +const tslib_1 = require("tslib"); +const TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +class ServerError extends TypesenseError_1.default { +} exports.default = ServerError; //# sourceMappingURL=ServerError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/ServerError.js.map b/lib/Typesense/Errors/ServerError.js.map index bac2216a..f95b460b 100644 --- a/lib/Typesense/Errors/ServerError.js.map +++ b/lib/Typesense/Errors/ServerError.js.map @@ -1 +1 @@ -{"version":3,"file":"ServerError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ServerError.ts"],"names":[],"mappings":";;;AAAA,4EAA8C;AAE9C;IAAyC,uCAAc;IAAvD;;IAAyD,CAAC;IAAD,kBAAC;AAAD,CAAC,AAA1D,CAAyC,wBAAc,GAAG"} \ No newline at end of file +{"version":3,"file":"ServerError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/ServerError.ts"],"names":[],"mappings":";;;AAAA,8EAA8C;AAE9C,MAAqB,WAAY,SAAQ,wBAAc;CAAG;AAA1D,8BAA0D"} \ No newline at end of file diff --git a/lib/Typesense/Errors/TypesenseError.js b/lib/Typesense/Errors/TypesenseError.js index 39ad6dfc..db955b85 100644 --- a/lib/Typesense/Errors/TypesenseError.js +++ b/lib/Typesense/Errors/TypesenseError.js @@ -1,19 +1,14 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TypesenseError = /** @class */ (function (_super) { - tslib_1.__extends(TypesenseError, _super); +class TypesenseError extends Error { // Source: https://stackoverflow.com/a/58417721/123545 - function TypesenseError(message, httpBody, httpStatus) { - var _newTarget = this.constructor; - var _this = _super.call(this, message) || this; - _this.name = _newTarget.name; - _this.httpBody = httpBody; - _this.httpStatus = httpStatus; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; + constructor(message, httpBody, httpStatus) { + super(message); + this.name = new.target.name; + this.httpBody = httpBody; + this.httpStatus = httpStatus; + Object.setPrototypeOf(this, new.target.prototype); } - return TypesenseError; -}(Error)); +} exports.default = TypesenseError; //# sourceMappingURL=TypesenseError.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/TypesenseError.js.map b/lib/Typesense/Errors/TypesenseError.js.map index beab88dc..6d5449c4 100644 --- a/lib/Typesense/Errors/TypesenseError.js.map +++ b/lib/Typesense/Errors/TypesenseError.js.map @@ -1 +1 @@ -{"version":3,"file":"TypesenseError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/TypesenseError.ts"],"names":[],"mappings":";;;AAAA;IAA4C,0CAAK;IAI/C,sDAAsD;IACtD,wBAAY,OAAgB,EAAE,QAAiB,EAAE,UAAmB;;QAClE,YAAA,MAAK,YAAC,OAAO,CAAC,SAAC;QACf,KAAI,CAAC,IAAI,GAAG,WAAW,IAAI,CAAC;QAC5B,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,KAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;;IACpD,CAAC;IACH,qBAAC;AAAD,CAAC,AAZD,CAA4C,KAAK,GAYhD"} \ No newline at end of file +{"version":3,"file":"TypesenseError.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/TypesenseError.ts"],"names":[],"mappings":";;AAAA,MAAqB,cAAe,SAAQ,KAAK;IAI/C,sDAAsD;IACtD,YAAY,OAAgB,EAAE,QAAiB,EAAE,UAAmB;QAClE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAZD,iCAYC"} \ No newline at end of file diff --git a/lib/Typesense/Errors/index.js b/lib/Typesense/Errors/index.js index 5740bee1..7bcb317b 100644 --- a/lib/Typesense/Errors/index.js +++ b/lib/Typesense/Errors/index.js @@ -1,25 +1,25 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ImportError = exports.TypesenseError = exports.ServerError = exports.RequestUnauthorized = exports.RequestMalformed = exports.ObjectUnprocessable = exports.ObjectNotFound = exports.ObjectAlreadyExists = exports.MissingConfigurationError = exports.HTTPError = void 0; -var tslib_1 = require("tslib"); -var HTTPError_1 = tslib_1.__importDefault(require("./HTTPError")); +const tslib_1 = require("tslib"); +const HTTPError_1 = tslib_1.__importDefault(require("./HTTPError")); exports.HTTPError = HTTPError_1.default; -var MissingConfigurationError_1 = tslib_1.__importDefault(require("./MissingConfigurationError")); +const MissingConfigurationError_1 = tslib_1.__importDefault(require("./MissingConfigurationError")); exports.MissingConfigurationError = MissingConfigurationError_1.default; -var ObjectAlreadyExists_1 = tslib_1.__importDefault(require("./ObjectAlreadyExists")); +const ObjectAlreadyExists_1 = tslib_1.__importDefault(require("./ObjectAlreadyExists")); exports.ObjectAlreadyExists = ObjectAlreadyExists_1.default; -var ObjectNotFound_1 = tslib_1.__importDefault(require("./ObjectNotFound")); +const ObjectNotFound_1 = tslib_1.__importDefault(require("./ObjectNotFound")); exports.ObjectNotFound = ObjectNotFound_1.default; -var ObjectUnprocessable_1 = tslib_1.__importDefault(require("./ObjectUnprocessable")); +const ObjectUnprocessable_1 = tslib_1.__importDefault(require("./ObjectUnprocessable")); exports.ObjectUnprocessable = ObjectUnprocessable_1.default; -var RequestMalformed_1 = tslib_1.__importDefault(require("./RequestMalformed")); +const RequestMalformed_1 = tslib_1.__importDefault(require("./RequestMalformed")); exports.RequestMalformed = RequestMalformed_1.default; -var RequestUnauthorized_1 = tslib_1.__importDefault(require("./RequestUnauthorized")); +const RequestUnauthorized_1 = tslib_1.__importDefault(require("./RequestUnauthorized")); exports.RequestUnauthorized = RequestUnauthorized_1.default; -var ServerError_1 = tslib_1.__importDefault(require("./ServerError")); +const ServerError_1 = tslib_1.__importDefault(require("./ServerError")); exports.ServerError = ServerError_1.default; -var ImportError_1 = tslib_1.__importDefault(require("./ImportError")); +const ImportError_1 = tslib_1.__importDefault(require("./ImportError")); exports.ImportError = ImportError_1.default; -var TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); +const TypesenseError_1 = tslib_1.__importDefault(require("./TypesenseError")); exports.TypesenseError = TypesenseError_1.default; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/Typesense/Errors/index.js.map b/lib/Typesense/Errors/index.js.map index 45d675ea..9eb0cb76 100644 --- a/lib/Typesense/Errors/index.js.map +++ b/lib/Typesense/Errors/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/index.ts"],"names":[],"mappings":";;;;AAAA,kEAAoC;AAYlC,oBAZK,mBAAS,CAYL;AAXX,kGAAoE;AAYlE,oCAZK,mCAAyB,CAYL;AAX3B,sFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,4EAA8C;AAY5C,yBAZK,wBAAc,CAYL;AAXhB,sFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,gFAAkD;AAYhD,2BAZK,0BAAgB,CAYL;AAXlB,sFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,sEAAwC;AAYtC,sBAZK,qBAAW,CAYL;AAXb,sEAAwC;AAatC,sBAbK,qBAAW,CAaL;AAZb,4EAA8C;AAW5C,yBAXK,wBAAc,CAWL"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Typesense/Errors/index.ts"],"names":[],"mappings":";;;;AAAA,oEAAoC;AAYlC,oBAZK,mBAAS,CAYL;AAXX,oGAAoE;AAYlE,oCAZK,mCAAyB,CAYL;AAX3B,wFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,8EAA8C;AAY5C,yBAZK,wBAAc,CAYL;AAXhB,wFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,kFAAkD;AAYhD,2BAZK,0BAAgB,CAYL;AAXlB,wFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,wEAAwC;AAYtC,sBAZK,qBAAW,CAYL;AAXb,wEAAwC;AAatC,sBAbK,qBAAW,CAaL;AAZb,8EAA8C;AAW5C,yBAXK,wBAAc,CAWL"} \ No newline at end of file diff --git a/lib/Typesense/Health.js b/lib/Typesense/Health.js index 0c28608a..78592cc1 100644 --- a/lib/Typesense/Health.js +++ b/lib/Typesense/Health.js @@ -1,19 +1,13 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/health"; -var Health = /** @class */ (function () { - function Health(apiCall) { +const RESOURCEPATH = "/health"; +class Health { + constructor(apiCall) { this.apiCall = apiCall; } - Health.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - return Health; -}()); + async retrieve() { + return this.apiCall.get(RESOURCEPATH); + } +} exports.default = Health; //# sourceMappingURL=Health.js.map \ No newline at end of file diff --git a/lib/Typesense/Health.js.map b/lib/Typesense/Health.js.map index a424ca10..ac7fb246 100644 --- a/lib/Typesense/Health.js.map +++ b/lib/Typesense/Health.js.map @@ -1 +1 @@ -{"version":3,"file":"Health.js","sourceRoot":"","sources":["../../src/Typesense/Health.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,SAAS,CAAC;AAM/B;IACE,gBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,yBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAiB,YAAY,CAAC,EAAC;;;KACvD;IACH,aAAC;AAAD,CAAC,AAND,IAMC"} \ No newline at end of file +{"version":3,"file":"Health.js","sourceRoot":"","sources":["../../src/Typesense/Health.ts"],"names":[],"mappings":";;AAEA,MAAM,YAAY,GAAG,SAAS,CAAC;AAM/B,MAAqB,MAAM;IACzB,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAiB,YAAY,CAAC,CAAC;IACxD,CAAC;CACF;AAND,yBAMC"} \ No newline at end of file diff --git a/lib/Typesense/Key.js b/lib/Typesense/Key.js index 27538455..473618ac 100644 --- a/lib/Typesense/Key.js +++ b/lib/Typesense/Key.js @@ -1,30 +1,21 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Keys_1 = tslib_1.__importDefault(require("./Keys")); -var Key = /** @class */ (function () { - function Key(id, apiCall) { +const tslib_1 = require("tslib"); +const Keys_1 = tslib_1.__importDefault(require("./Keys")); +class Key { + constructor(id, apiCall) { this.id = id; this.apiCall = apiCall; } - Key.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Key.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Key.prototype.endpointPath = function () { - return "".concat(Keys_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); - }; - return Key; -}()); + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Keys_1.default.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +} exports.default = Key; //# sourceMappingURL=Key.js.map \ No newline at end of file diff --git a/lib/Typesense/Key.js.map b/lib/Typesense/Key.js.map index 4eb8658c..4cd3e075 100644 --- a/lib/Typesense/Key.js.map +++ b/lib/Typesense/Key.js.map @@ -1 +1 @@ -{"version":3,"file":"Key.js","sourceRoot":"","sources":["../../src/Typesense/Key.ts"],"names":[],"mappings":";;;AACA,wDAA0B;AAoB1B;IACE,aACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,sBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAY,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACzD;IAEK,oBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAkB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAClE;IAEO,0BAAY,GAApB;QACE,OAAO,UAAG,cAAI,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;IAC/D,CAAC;IACH,UAAC;AAAD,CAAC,AAjBD,IAiBC"} \ No newline at end of file +{"version":3,"file":"Key.js","sourceRoot":"","sources":["../../src/Typesense/Key.ts"],"names":[],"mappings":";;;AACA,0DAA0B;AAoB1B,MAAqB,GAAG;IACtB,YACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAY,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAkB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACnE,CAAC;IAEO,YAAY;QAClB,OAAO,GAAG,cAAI,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/D,CAAC;CACF;AAjBD,sBAiBC"} \ No newline at end of file diff --git a/lib/Typesense/Keys.js b/lib/Typesense/Keys.js index 55741a65..b67c3580 100644 --- a/lib/Typesense/Keys.js +++ b/lib/Typesense/Keys.js @@ -1,46 +1,32 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var crypto_1 = require("crypto"); -var Utils_1 = require("./Utils"); -var RESOURCEPATH = "/keys"; -var Keys = /** @class */ (function () { - function Keys(apiCall) { +const crypto_1 = require("crypto"); +const Utils_1 = require("./Utils"); +const RESOURCEPATH = "/keys"; +class Keys { + constructor(apiCall) { this.apiCall = apiCall; this.apiCall = apiCall; } - Keys.prototype.create = function (params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.post(Keys.RESOURCEPATH, params)]; - }); - }); - }; - Keys.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - Keys.prototype.generateScopedSearchKey = function (searchKey, parameters) { + async create(params) { + return this.apiCall.post(Keys.RESOURCEPATH, params); + } + async retrieve() { + return this.apiCall.get(RESOURCEPATH); + } + generateScopedSearchKey(searchKey, parameters) { // Note: only a key generated with the `documents:search` action will be // accepted by the server, when usined with the search endpoint. - var normalizedParams = (0, Utils_1.normalizeArrayableParams)(parameters); - var paramsJSON = JSON.stringify(normalizedParams); - var digest = Buffer.from((0, crypto_1.createHmac)("sha256", searchKey).update(paramsJSON).digest("base64")); - var keyPrefix = searchKey.substr(0, 4); - var rawScopedKey = "".concat(digest).concat(keyPrefix).concat(paramsJSON); + const normalizedParams = (0, Utils_1.normalizeArrayableParams)(parameters); + const paramsJSON = JSON.stringify(normalizedParams); + const digest = Buffer.from((0, crypto_1.createHmac)("sha256", searchKey).update(paramsJSON).digest("base64")); + const keyPrefix = searchKey.substr(0, 4); + const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`; return Buffer.from(rawScopedKey).toString("base64"); - }; - Object.defineProperty(Keys, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Keys; -}()); + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = Keys; //# sourceMappingURL=Keys.js.map \ No newline at end of file diff --git a/lib/Typesense/Keys.js.map b/lib/Typesense/Keys.js.map index 46be753e..d79d3f0e 100644 --- a/lib/Typesense/Keys.js.map +++ b/lib/Typesense/Keys.js.map @@ -1 +1 @@ -{"version":3,"file":"Keys.js","sourceRoot":"","sources":["../../src/Typesense/Keys.ts"],"names":[],"mappings":";;;AAAA,iCAAoC;AAIpC,iCAAmD;AAEnD,IAAM,YAAY,GAAG,OAAO,CAAC;AAY7B;IACE,cAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,qBAAM,GAAZ,UAAa,MAAuB;;;gBAClC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAY,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,EAAC;;;KAChE;IAEK,uBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAqB,YAAY,CAAC,EAAC;;;KAC3D;IAED,sCAAuB,GAAvB,UACE,SAAiB,EACjB,UAAyC;QAEzC,wEAAwE;QACxE,gEAAgE;QAChE,IAAM,gBAAgB,GAAG,IAAA,gCAAwB,EAAC,UAAU,CAAC,CAAC;QAC9D,IAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACxB,IAAA,mBAAU,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CACpE,CAAC;QACF,IAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,IAAM,YAAY,GAAG,UAAG,MAAM,SAAG,SAAS,SAAG,UAAU,CAAE,CAAC;QAE1D,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,sBAAW,oBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,WAAC;AAAD,CAAC,AAjCD,IAiCC"} \ No newline at end of file +{"version":3,"file":"Keys.js","sourceRoot":"","sources":["../../src/Typesense/Keys.ts"],"names":[],"mappings":";;AAAA,mCAAoC;AAIpC,mCAAmD;AAEnD,MAAM,YAAY,GAAG,OAAO,CAAC;AAY7B,MAAqB,IAAI;IACvB,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAuB;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAY,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAqB,YAAY,CAAC,CAAC;IAC5D,CAAC;IAED,uBAAuB,CACrB,SAAiB,EACjB,UAAyC;QAEzC,wEAAwE;QACxE,gEAAgE;QAChE,MAAM,gBAAgB,GAAG,IAAA,gCAAwB,EAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACxB,IAAA,mBAAU,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CACpE,CAAC;QACF,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,EAAE,CAAC;QAE1D,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAjCD,uBAiCC"} \ No newline at end of file diff --git a/lib/Typesense/Metrics.js b/lib/Typesense/Metrics.js index 9c564425..83167a42 100644 --- a/lib/Typesense/Metrics.js +++ b/lib/Typesense/Metrics.js @@ -1,19 +1,13 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/metrics.json"; -var Metrics = /** @class */ (function () { - function Metrics(apiCall) { +const RESOURCEPATH = "/metrics.json"; +class Metrics { + constructor(apiCall) { this.apiCall = apiCall; } - Metrics.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - return Metrics; -}()); + async retrieve() { + return this.apiCall.get(RESOURCEPATH); + } +} exports.default = Metrics; //# sourceMappingURL=Metrics.js.map \ No newline at end of file diff --git a/lib/Typesense/Metrics.js.map b/lib/Typesense/Metrics.js.map index 55e1f29e..9b049224 100644 --- a/lib/Typesense/Metrics.js.map +++ b/lib/Typesense/Metrics.js.map @@ -1 +1 @@ -{"version":3,"file":"Metrics.js","sourceRoot":"","sources":["../../src/Typesense/Metrics.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,eAAe,CAAC;AAsBrC;IACE,iBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC;;;KACvC;IACH,cAAC;AAAD,CAAC,AAND,IAMC"} \ No newline at end of file +{"version":3,"file":"Metrics.js","sourceRoot":"","sources":["../../src/Typesense/Metrics.ts"],"names":[],"mappings":";;AAEA,MAAM,YAAY,GAAG,eAAe,CAAC;AAsBrC,MAAqB,OAAO;IAC1B,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;CACF;AAND,0BAMC"} \ No newline at end of file diff --git a/lib/Typesense/MultiSearch.js b/lib/Typesense/MultiSearch.js index 2f5e72e2..45268911 100644 --- a/lib/Typesense/MultiSearch.js +++ b/lib/Typesense/MultiSearch.js @@ -1,50 +1,41 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RequestWithCache_1 = tslib_1.__importDefault(require("./RequestWithCache")); -var Utils_1 = require("./Utils"); -var RESOURCEPATH = "/multi_search"; -var MultiSearch = /** @class */ (function () { - function MultiSearch(apiCall, configuration, useTextContentType) { - if (useTextContentType === void 0) { useTextContentType = false; } +const tslib_1 = require("tslib"); +const RequestWithCache_1 = tslib_1.__importDefault(require("./RequestWithCache")); +const Utils_1 = require("./Utils"); +const RESOURCEPATH = "/multi_search"; +class MultiSearch { + constructor(apiCall, configuration, useTextContentType = false) { this.apiCall = apiCall; this.configuration = configuration; this.useTextContentType = useTextContentType; this.requestWithCache = new RequestWithCache_1.default(); } - MultiSearch.prototype.clearCache = function () { + clearCache() { this.requestWithCache.clearCache(); - }; - MultiSearch.prototype.perform = function (searchRequests_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (searchRequests, commonParams, _a) { - var additionalHeaders, additionalQueryParams, queryParams, normalizedSearchRequests, normalizedQueryParams; - if (commonParams === void 0) { commonParams = {}; } - var _b = _a === void 0 ? {} : _a, _c = _b.cacheSearchResultsForSeconds, cacheSearchResultsForSeconds = _c === void 0 ? this.configuration - .cacheSearchResultsForSeconds : _c; - return tslib_1.__generator(this, function (_d) { - additionalHeaders = {}; - if (this.useTextContentType) { - additionalHeaders["content-type"] = "text/plain"; - } - additionalQueryParams = {}; - if (this.configuration.useServerSideSearchCache === true) { - additionalQueryParams["use_cache"] = true; - } - queryParams = tslib_1.__assign(tslib_1.__assign({}, commonParams), additionalQueryParams); - normalizedSearchRequests = { - searches: searchRequests.searches.map(Utils_1.normalizeArrayableParams), - }; - normalizedQueryParams = (0, Utils_1.normalizeArrayableParams)(queryParams); - return [2 /*return*/, this.requestWithCache.perform(this.apiCall, this.apiCall.post, [ - RESOURCEPATH, - normalizedSearchRequests, - normalizedQueryParams, - additionalHeaders, - ], { cacheResponseForSeconds: cacheSearchResultsForSeconds })]; - }); - }); - }; - return MultiSearch; -}()); + } + async perform(searchRequests, commonParams = {}, { cacheSearchResultsForSeconds = this.configuration + .cacheSearchResultsForSeconds, } = {}) { + const additionalHeaders = {}; + if (this.useTextContentType) { + additionalHeaders["content-type"] = "text/plain"; + } + const additionalQueryParams = {}; + if (this.configuration.useServerSideSearchCache === true) { + additionalQueryParams["use_cache"] = true; + } + const queryParams = { ...commonParams, ...additionalQueryParams }; + const normalizedSearchRequests = { + searches: searchRequests.searches.map(Utils_1.normalizeArrayableParams), + }; + const normalizedQueryParams = (0, Utils_1.normalizeArrayableParams)(queryParams); + return this.requestWithCache.perform(this.apiCall, this.apiCall.post, [ + RESOURCEPATH, + normalizedSearchRequests, + normalizedQueryParams, + additionalHeaders, + ], { cacheResponseForSeconds: cacheSearchResultsForSeconds }); + } +} exports.default = MultiSearch; //# sourceMappingURL=MultiSearch.js.map \ No newline at end of file diff --git a/lib/Typesense/MultiSearch.js.map b/lib/Typesense/MultiSearch.js.map index e24a450f..5d11985b 100644 --- a/lib/Typesense/MultiSearch.js.map +++ b/lib/Typesense/MultiSearch.js.map @@ -1 +1 @@ -{"version":3,"file":"MultiSearch.js","sourceRoot":"","sources":["../../src/Typesense/MultiSearch.ts"],"names":[],"mappings":";;;AAEA,gFAAkD;AAOlD,iCAAmD;AAEnD,IAAM,YAAY,GAAG,eAAe,CAAC;AAyBrC;IAGE,qBACU,OAAgB,EAChB,aAA4B,EAC5B,kBAAmC;QAAnC,mCAAA,EAAA,0BAAmC;QAFnC,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAAe;QAC5B,uBAAkB,GAAlB,kBAAkB,CAAiB;QAE3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,0BAAgB,EAAE,CAAC;IACjD,CAAC;IAED,gCAAU,GAAV;QACE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAEK,6BAAO,GAAb;oEACE,cAAyC,EACzC,YAAoD,EACpD,EAGiD;;YAJjD,6BAAA,EAAA,iBAAoD;gBACpD,qBAG+C,EAAE,KAAA,EAF/C,oCAC+B,EAD/B,4BAA4B,mBAAG,IAAI,CAAC,aAAa;iBAC9C,4BAA4B,KAAA;;gBAG3B,iBAAiB,GAAG,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,iBAAiB,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;gBACnD,CAAC;gBAEK,qBAAqB,GAAG,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,aAAa,CAAC,wBAAwB,KAAK,IAAI,EAAE,CAAC;oBACzD,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;gBAC5C,CAAC;gBAEK,WAAW,yCAAQ,YAAY,GAAK,qBAAqB,CAAE,CAAC;gBAE5D,wBAAwB,GAAG;oBAC/B,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,gCAAwB,CAAC;iBAChE,CAAC;gBAEI,qBAAqB,GAAG,IAAA,gCAAwB,EAAC,WAAW,CAAC,CAAC;gBAEpE,sBAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CAAC,IAAI,EACjB;wBACE,YAAY;wBACZ,wBAAwB;wBACxB,qBAAqB;wBACrB,iBAAiB;qBAClB,EACD,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,CACvB,EAAC;;;KACtC;IACH,kBAAC;AAAD,CAAC,AArDD,IAqDC"} \ No newline at end of file +{"version":3,"file":"MultiSearch.js","sourceRoot":"","sources":["../../src/Typesense/MultiSearch.ts"],"names":[],"mappings":";;;AAEA,kFAAkD;AAOlD,mCAAmD;AAEnD,MAAM,YAAY,GAAG,eAAe,CAAC;AAyBrC,MAAqB,WAAW;IAG9B,YACU,OAAgB,EAChB,aAA4B,EAC5B,qBAA8B,KAAK;QAFnC,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAAe;QAC5B,uBAAkB,GAAlB,kBAAkB,CAAiB;QAE3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,0BAAgB,EAAE,CAAC;IACjD,CAAC;IAED,UAAU;QACR,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,cAAyC,EACzC,eAAkD,EAAE,EACpD,EACE,4BAA4B,GAAG,IAAI,CAAC,aAAa;SAC9C,4BAA4B,MACc,EAAE;QAEjD,MAAM,iBAAiB,GAAG,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,iBAAiB,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;QACnD,CAAC;QAED,MAAM,qBAAqB,GAAG,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,aAAa,CAAC,wBAAwB,KAAK,IAAI,EAAE,CAAC;YACzD,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QAC5C,CAAC;QAED,MAAM,WAAW,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,qBAAqB,EAAE,CAAC;QAElE,MAAM,wBAAwB,GAAG;YAC/B,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,gCAAwB,CAAC;SAChE,CAAC;QAEF,MAAM,qBAAqB,GAAG,IAAA,gCAAwB,EAAC,WAAW,CAAC,CAAC;QAEpE,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CAAC,IAAI,EACjB;YACE,YAAY;YACZ,wBAAwB;YACxB,qBAAqB;YACrB,iBAAiB;SAClB,EACD,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,CACvB,CAAC;IACvC,CAAC;CACF;AArDD,8BAqDC"} \ No newline at end of file diff --git a/lib/Typesense/Operations.js b/lib/Typesense/Operations.js index 9d42d93b..c0661712 100644 --- a/lib/Typesense/Operations.js +++ b/lib/Typesense/Operations.js @@ -1,20 +1,13 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/operations"; -var Operations = /** @class */ (function () { - function Operations(apiCall) { +const RESOURCEPATH = "/operations"; +class Operations { + constructor(apiCall) { this.apiCall = apiCall; } - Operations.prototype.perform = function (operationName_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (operationName, queryParameters) { - if (queryParameters === void 0) { queryParameters = {}; } - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.post("".concat(RESOURCEPATH, "/").concat(operationName), {}, queryParameters)]; - }); - }); - }; - return Operations; -}()); + async perform(operationName, queryParameters = {}) { + return this.apiCall.post(`${RESOURCEPATH}/${operationName}`, {}, queryParameters); + } +} exports.default = Operations; //# sourceMappingURL=Operations.js.map \ No newline at end of file diff --git a/lib/Typesense/Operations.js.map b/lib/Typesense/Operations.js.map index 7aa222a9..7a57ae46 100644 --- a/lib/Typesense/Operations.js.map +++ b/lib/Typesense/Operations.js.map @@ -1 +1 @@ -{"version":3,"file":"Operations.js","sourceRoot":"","sources":["../../src/Typesense/Operations.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,aAAa,CAAC;AAEnC;IACE,oBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,4BAAO,GAAb;oEACE,aAMiB,EACjB,eAAyC;YAAzC,gCAAA,EAAA,oBAAyC;;gBAEzC,sBAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,UAAG,YAAY,cAAI,aAAa,CAAE,EAClC,EAAE,EACF,eAAe,CAChB,EAAC;;;KACH;IACH,iBAAC;AAAD,CAAC,AAnBD,IAmBC"} \ No newline at end of file +{"version":3,"file":"Operations.js","sourceRoot":"","sources":["../../src/Typesense/Operations.ts"],"names":[],"mappings":";;AAEA,MAAM,YAAY,GAAG,aAAa,CAAC;AAEnC,MAAqB,UAAU;IAC7B,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC,KAAK,CAAC,OAAO,CACX,aAMiB,EACjB,kBAAuC,EAAE;QAEzC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,GAAG,YAAY,IAAI,aAAa,EAAE,EAClC,EAAE,EACF,eAAe,CAChB,CAAC;IACJ,CAAC;CACF;AAnBD,6BAmBC"} \ No newline at end of file diff --git a/lib/Typesense/Override.js b/lib/Typesense/Override.js index a2e07e2f..b2969a80 100644 --- a/lib/Typesense/Override.js +++ b/lib/Typesense/Override.js @@ -1,32 +1,23 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var Overrides_1 = tslib_1.__importDefault(require("./Overrides")); -var Override = /** @class */ (function () { - function Override(collectionName, overrideId, apiCall) { +const tslib_1 = require("tslib"); +const Collections_1 = tslib_1.__importDefault(require("./Collections")); +const Overrides_1 = tslib_1.__importDefault(require("./Overrides")); +class Override { + constructor(collectionName, overrideId, apiCall) { this.collectionName = collectionName; this.overrideId = overrideId; this.apiCall = apiCall; } - Override.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Override.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Override.prototype.endpointPath = function () { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Overrides_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.overrideId)); - }; - return Override; -}()); + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Collections_1.default.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides_1.default.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`; + } +} exports.default = Override; //# sourceMappingURL=Override.js.map \ No newline at end of file diff --git a/lib/Typesense/Override.js.map b/lib/Typesense/Override.js.map index 43ae48f8..acf1c51c 100644 --- a/lib/Typesense/Override.js.map +++ b/lib/Typesense/Override.js.map @@ -1 +1 @@ -{"version":3,"file":"Override.js","sourceRoot":"","sources":["../../src/Typesense/Override.ts"],"names":[],"mappings":";;;AACA,sEAAwC;AACxC,kEAA8D;AAU9D;IACE,kBACU,cAAsB,EACtB,UAAkB,EAClB,OAAgB;QAFhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,2BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAiB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC9D;IAEK,yBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEO,+BAAY,GAApB;QACE,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAG,mBAAS,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAE,CAAC;IAClJ,CAAC;IACH,eAAC;AAAD,CAAC,AAlBD,IAkBC"} \ No newline at end of file +{"version":3,"file":"Override.js","sourceRoot":"","sources":["../../src/Typesense/Override.ts"],"names":[],"mappings":";;;AACA,wEAAwC;AACxC,oEAA8D;AAU9D,MAAqB,QAAQ;IAC3B,YACU,cAAsB,EACtB,UAAkB,EAClB,OAAgB;QAFhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAiB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACxE,CAAC;IAEO,YAAY;QAClB,OAAO,GAAG,qBAAW,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,mBAAS,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;IAClJ,CAAC;CACF;AAlBD,2BAkBC"} \ No newline at end of file diff --git a/lib/Typesense/Overrides.js b/lib/Typesense/Overrides.js index 503c47c1..5d411c75 100644 --- a/lib/Typesense/Overrides.js +++ b/lib/Typesense/Overrides.js @@ -1,38 +1,25 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var RESOURCEPATH = "/overrides"; -var Overrides = /** @class */ (function () { - function Overrides(collectionName, apiCall) { +const tslib_1 = require("tslib"); +const Collections_1 = tslib_1.__importDefault(require("./Collections")); +const RESOURCEPATH = "/overrides"; +class Overrides { + constructor(collectionName, apiCall) { this.collectionName = collectionName; this.apiCall = apiCall; } - Overrides.prototype.upsert = function (overrideId, params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(overrideId), params)]; - }); - }); - }; - Overrides.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Overrides.prototype.endpointPath = function (operation) { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(this.collectionName).concat(Overrides.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(Overrides, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Overrides; -}()); + async upsert(overrideId, params) { + return this.apiCall.put(this.endpointPath(overrideId), params); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${Collections_1.default.RESOURCEPATH}/${this.collectionName}${Overrides.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = Overrides; //# sourceMappingURL=Overrides.js.map \ No newline at end of file diff --git a/lib/Typesense/Overrides.js.map b/lib/Typesense/Overrides.js.map index a7ac0700..2b39345c 100644 --- a/lib/Typesense/Overrides.js.map +++ b/lib/Typesense/Overrides.js.map @@ -1 +1 @@ -{"version":3,"file":"Overrides.js","sourceRoot":"","sources":["../../src/Typesense/Overrides.ts"],"names":[],"mappings":";;;AACA,sEAAwC;AAGxC,IAAM,YAAY,GAAG,YAAY,CAAC;AAuClC;IACE,mBACU,cAAsB,EACtB,OAAgB;QADhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,0BAAM,GAAZ,UACE,UAAkB,EAClB,MAA4B;;;gBAE5B,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAC7B,MAAM,CACP,EAAC;;;KACH;IAEK,4BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEO,gCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,IAAI,CAAC,cAAc,SACvD,SAAS,CAAC,YAAY,SACrB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAE,CAAC;IAC1E,CAAC;IAED,sBAAW,yBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,gBAAC;AAAD,CAAC,AA7BD,IA6BC"} \ No newline at end of file +{"version":3,"file":"Overrides.js","sourceRoot":"","sources":["../../src/Typesense/Overrides.ts"],"names":[],"mappings":";;;AACA,wEAAwC;AAGxC,MAAM,YAAY,GAAG,YAAY,CAAC;AAuClC,MAAqB,SAAS;IAC5B,YACU,cAAsB,EACtB,OAAgB;QADhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEJ,KAAK,CAAC,MAAM,CACV,UAAkB,EAClB,MAA4B;QAE5B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAC7B,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACxE,CAAC;IAEO,YAAY,CAAC,SAAkB;QACrC,OAAO,GAAG,qBAAW,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,GACvD,SAAS,CAAC,YACZ,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1E,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AA7BD,4BA6BC"} \ No newline at end of file diff --git a/lib/Typesense/Preset.js b/lib/Typesense/Preset.js index 1f9f7d84..69073a95 100644 --- a/lib/Typesense/Preset.js +++ b/lib/Typesense/Preset.js @@ -1,30 +1,21 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Presets_1 = tslib_1.__importDefault(require("./Presets")); -var Preset = /** @class */ (function () { - function Preset(presetId, apiCall) { +const tslib_1 = require("tslib"); +const Presets_1 = tslib_1.__importDefault(require("./Presets")); +class Preset { + constructor(presetId, apiCall) { this.presetId = presetId; this.apiCall = apiCall; } - Preset.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Preset.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Preset.prototype.endpointPath = function () { - return "".concat(Presets_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.presetId)); - }; - return Preset; -}()); + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Presets_1.default.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`; + } +} exports.default = Preset; //# sourceMappingURL=Preset.js.map \ No newline at end of file diff --git a/lib/Typesense/Preset.js.map b/lib/Typesense/Preset.js.map index a1d77dcb..c83b8480 100644 --- a/lib/Typesense/Preset.js.map +++ b/lib/Typesense/Preset.js.map @@ -1 +1 @@ -{"version":3,"file":"Preset.js","sourceRoot":"","sources":["../../src/Typesense/Preset.ts"],"names":[],"mappings":";;;AACA,8DAAwD;AAUxD;IACE,gBAAoB,QAAgB,EAAU,OAAgB;QAA1C,aAAQ,GAAR,QAAQ,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAE5D,yBAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAe,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC5D;IAEK,uBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAqB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACrE;IAEO,6BAAY,GAApB;QACE,OAAO,UAAG,iBAAO,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAE,CAAC;IACxE,CAAC;IACH,aAAC;AAAD,CAAC,AAdD,IAcC"} \ No newline at end of file +{"version":3,"file":"Preset.js","sourceRoot":"","sources":["../../src/Typesense/Preset.ts"],"names":[],"mappings":";;;AACA,gEAAwD;AAUxD,MAAqB,MAAM;IACzB,YAAoB,QAAgB,EAAU,OAAgB;QAA1C,aAAQ,GAAR,QAAQ,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElE,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAe,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAqB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACtE,CAAC;IAEO,YAAY;QAClB,OAAO,GAAG,iBAAO,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxE,CAAC;CACF;AAdD,yBAcC"} \ No newline at end of file diff --git a/lib/Typesense/Presets.js b/lib/Typesense/Presets.js index c780d6e0..ac13a9dc 100644 --- a/lib/Typesense/Presets.js +++ b/lib/Typesense/Presets.js @@ -1,49 +1,32 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Utils_1 = require("./Utils"); -var RESOURCEPATH = "/presets"; -var Presets = /** @class */ (function () { - function Presets(apiCall) { +const Utils_1 = require("./Utils"); +const RESOURCEPATH = "/presets"; +class Presets { + constructor(apiCall) { this.apiCall = apiCall; } - Presets.prototype.upsert = function (presetId, params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var normalizedParams_1, normalizedParams; - return tslib_1.__generator(this, function (_a) { - if (typeof params.value === "object" && "searches" in params.value) { - normalizedParams_1 = params.value.searches.map(function (search) { - return (0, Utils_1.normalizeArrayableParams)(search); - }); - return [2 /*return*/, this.apiCall.put(this.endpointPath(presetId), { - value: { searches: normalizedParams_1 }, - })]; - } - normalizedParams = (0, Utils_1.normalizeArrayableParams)(params.value); - return [2 /*return*/, this.apiCall.put(this.endpointPath(presetId), { - value: normalizedParams, - })]; + async upsert(presetId, params) { + if (typeof params.value === "object" && "searches" in params.value) { + const normalizedParams = params.value.searches.map((search) => (0, Utils_1.normalizeArrayableParams)(search)); + return this.apiCall.put(this.endpointPath(presetId), { + value: { searches: normalizedParams }, }); + } + const normalizedParams = (0, Utils_1.normalizeArrayableParams)(params.value); + return this.apiCall.put(this.endpointPath(presetId), { + value: normalizedParams, }); - }; - Presets.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Presets.prototype.endpointPath = function (operation) { - return "".concat(Presets.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(Presets, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Presets; -}()); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${Presets.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = Presets; //# sourceMappingURL=Presets.js.map \ No newline at end of file diff --git a/lib/Typesense/Presets.js.map b/lib/Typesense/Presets.js.map index 3d57b2a6..52c132b3 100644 --- a/lib/Typesense/Presets.js.map +++ b/lib/Typesense/Presets.js.map @@ -1 +1 @@ -{"version":3,"file":"Presets.js","sourceRoot":"","sources":["../../src/Typesense/Presets.ts"],"names":[],"mappings":";;;AAIA,iCAAmD;AAEnD,IAAM,YAAY,GAAG,UAAU,CAAC;AAUhC;IACE,iBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,wBAAM,GAAZ,UACE,QAAgB,EAChB,MAA0B;;;;gBAE1B,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC7D,qBAAmB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,MAAM;wBACxD,OAAA,IAAA,gCAAwB,EAAC,MAAM,CAAC;oBAAhC,CAAgC,CACjC,CAAC;oBAEF,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAe,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;4BACjE,KAAK,EAAE,EAAE,QAAQ,EAAE,kBAAgB,EAAE;yBACtC,CAAC,EAAC;gBACL,CAAC;gBACK,gBAAgB,GAAG,IAAA,gCAAwB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEhE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAe,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;wBACjE,KAAK,EAAE,gBAAgB;qBACxB,CAAC,EAAC;;;KACJ;IAEK,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACrE;IAEO,8BAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,OAAO,CAAC,YAAY,SAC5B,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,uBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,cAAC;AAAD,CAAC,AApCD,IAoCC"} \ No newline at end of file +{"version":3,"file":"Presets.js","sourceRoot":"","sources":["../../src/Typesense/Presets.ts"],"names":[],"mappings":";;AAIA,mCAAmD;AAEnD,MAAM,YAAY,GAAG,UAAU,CAAC;AAUhC,MAAqB,OAAO;IAC1B,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC,KAAK,CAAC,MAAM,CACV,QAAgB,EAChB,MAA0B;QAE1B,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACnE,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5D,IAAA,gCAAwB,EAAC,MAAM,CAAC,CACjC,CAAC;YAEF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAe,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;gBACjE,KAAK,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;aACtC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAA,gCAAwB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEhE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAe,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;YACjE,KAAK,EAAE,gBAAgB;SACxB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACtE,CAAC;IAEO,YAAY,CAAC,SAAkB;QACrC,OAAO,GAAG,OAAO,CAAC,YAAY,GAC5B,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CACnE,EAAE,CAAC;IACL,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AApCD,0BAoCC"} \ No newline at end of file diff --git a/lib/Typesense/RequestWithCache.js b/lib/Typesense/RequestWithCache.js index 201b67a1..74c5d812 100644 --- a/lib/Typesense/RequestWithCache.js +++ b/lib/Typesense/RequestWithCache.js @@ -1,88 +1,76 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var defaultCacheResponseForSeconds = 2 * 60; -var defaultMaxSize = 100; -var RequestWithCache = /** @class */ (function () { - function RequestWithCache() { +const defaultCacheResponseForSeconds = 2 * 60; +const defaultMaxSize = 100; +class RequestWithCache { + constructor() { this.responseCache = new Map(); this.responsePromiseCache = new Map(); } - RequestWithCache.prototype.clearCache = function () { + clearCache() { this.responseCache = new Map(); this.responsePromiseCache = new Map(); - }; + } // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way - RequestWithCache.prototype.perform = function (requestContext, requestFunction, requestFunctionArguments, cacheOptions) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var _a, cacheResponseForSeconds, _b, maxSize, isCacheDisabled, requestFunctionArgumentsJSON, cacheEntry, now, isEntryValid, cachePromiseEntry, isEntryValid, responsePromise, response, isCacheOverMaxSize, oldestEntry, isResponsePromiseCacheOverMaxSize, oldestEntry; - return tslib_1.__generator(this, function (_c) { - switch (_c.label) { - case 0: - _a = cacheOptions.cacheResponseForSeconds, cacheResponseForSeconds = _a === void 0 ? defaultCacheResponseForSeconds : _a, _b = cacheOptions.maxSize, maxSize = _b === void 0 ? defaultMaxSize : _b; - isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0; - if (isCacheDisabled) { - return [2 /*return*/, requestFunction.call.apply(requestFunction, tslib_1.__spreadArray([requestContext], requestFunctionArguments, false))]; - } - requestFunctionArgumentsJSON = JSON.stringify(requestFunctionArguments); - cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON); - now = Date.now(); - if (cacheEntry) { - isEntryValid = now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000; - if (isEntryValid) { - this.responseCache.delete(requestFunctionArgumentsJSON); - this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry); - return [2 /*return*/, Promise.resolve(cacheEntry.response)]; - } - else { - this.responseCache.delete(requestFunctionArgumentsJSON); - } - } - cachePromiseEntry = this.responsePromiseCache.get(requestFunctionArgumentsJSON); - if (cachePromiseEntry) { - isEntryValid = now - cachePromiseEntry.requestTimestamp < - cacheResponseForSeconds * 1000; - if (isEntryValid) { - this.responsePromiseCache.delete(requestFunctionArgumentsJSON); - this.responsePromiseCache.set(requestFunctionArgumentsJSON, cachePromiseEntry); - return [2 /*return*/, cachePromiseEntry.responsePromise]; - } - else { - this.responsePromiseCache.delete(requestFunctionArgumentsJSON); - } - } - responsePromise = requestFunction.call.apply(requestFunction, tslib_1.__spreadArray([requestContext], requestFunctionArguments, false)); - this.responsePromiseCache.set(requestFunctionArgumentsJSON, { - requestTimestamp: now, - responsePromise: responsePromise, - }); - return [4 /*yield*/, responsePromise]; - case 1: - response = _c.sent(); - this.responseCache.set(requestFunctionArgumentsJSON, { - requestTimestamp: now, - response: response, - }); - isCacheOverMaxSize = this.responseCache.size > maxSize; - if (isCacheOverMaxSize) { - oldestEntry = this.responseCache.keys().next().value; - if (oldestEntry) { - this.responseCache.delete(oldestEntry); - } - } - isResponsePromiseCacheOverMaxSize = this.responsePromiseCache.size > maxSize; - if (isResponsePromiseCacheOverMaxSize) { - oldestEntry = this.responsePromiseCache.keys().next().value; - if (oldestEntry) { - this.responsePromiseCache.delete(oldestEntry); - } - } - return [2 /*return*/, response]; - } - }); + async perform(requestContext, requestFunction, requestFunctionArguments, cacheOptions) { + const { cacheResponseForSeconds = defaultCacheResponseForSeconds, maxSize = defaultMaxSize, } = cacheOptions; + const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0; + if (isCacheDisabled) { + return requestFunction.call(requestContext, ...requestFunctionArguments); + } + const requestFunctionArgumentsJSON = JSON.stringify(requestFunctionArguments); + const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON); + const now = Date.now(); + if (cacheEntry) { + const isEntryValid = now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000; + if (isEntryValid) { + this.responseCache.delete(requestFunctionArgumentsJSON); + this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry); + return Promise.resolve(cacheEntry.response); + } + else { + this.responseCache.delete(requestFunctionArgumentsJSON); + } + } + const cachePromiseEntry = this.responsePromiseCache.get(requestFunctionArgumentsJSON); + if (cachePromiseEntry) { + const isEntryValid = now - cachePromiseEntry.requestTimestamp < + cacheResponseForSeconds * 1000; + if (isEntryValid) { + this.responsePromiseCache.delete(requestFunctionArgumentsJSON); + this.responsePromiseCache.set(requestFunctionArgumentsJSON, cachePromiseEntry); + return cachePromiseEntry.responsePromise; + } + else { + this.responsePromiseCache.delete(requestFunctionArgumentsJSON); + } + } + const responsePromise = requestFunction.call(requestContext, ...requestFunctionArguments); + this.responsePromiseCache.set(requestFunctionArgumentsJSON, { + requestTimestamp: now, + responsePromise, + }); + const response = await responsePromise; + this.responseCache.set(requestFunctionArgumentsJSON, { + requestTimestamp: now, + response, }); - }; - return RequestWithCache; -}()); + const isCacheOverMaxSize = this.responseCache.size > maxSize; + if (isCacheOverMaxSize) { + const oldestEntry = this.responseCache.keys().next().value; + if (oldestEntry) { + this.responseCache.delete(oldestEntry); + } + } + const isResponsePromiseCacheOverMaxSize = this.responsePromiseCache.size > maxSize; + if (isResponsePromiseCacheOverMaxSize) { + const oldestEntry = this.responsePromiseCache.keys().next().value; + if (oldestEntry) { + this.responsePromiseCache.delete(oldestEntry); + } + } + return response; + } +} exports.default = RequestWithCache; //# sourceMappingURL=RequestWithCache.js.map \ No newline at end of file diff --git a/lib/Typesense/RequestWithCache.js.map b/lib/Typesense/RequestWithCache.js.map index ef7266ff..c5e5fffa 100644 --- a/lib/Typesense/RequestWithCache.js.map +++ b/lib/Typesense/RequestWithCache.js.map @@ -1 +1 @@ -{"version":3,"file":"RequestWithCache.js","sourceRoot":"","sources":["../../src/Typesense/RequestWithCache.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"RequestWithCache.js","sourceRoot":"","sources":["../../src/Typesense/RequestWithCache.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Typesense/SearchClient.js b/lib/Typesense/SearchClient.js index d8de0e03..ec7e3618 100644 --- a/lib/Typesense/SearchClient.js +++ b/lib/Typesense/SearchClient.js @@ -1,12 +1,12 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Configuration_1 = tslib_1.__importDefault(require("./Configuration")); -var ApiCall_1 = tslib_1.__importDefault(require("./ApiCall")); -var MultiSearch_1 = tslib_1.__importDefault(require("./MultiSearch")); -var SearchOnlyCollection_1 = require("./SearchOnlyCollection"); -var SearchClient = /** @class */ (function () { - function SearchClient(options) { +const tslib_1 = require("tslib"); +const Configuration_1 = tslib_1.__importDefault(require("./Configuration")); +const ApiCall_1 = tslib_1.__importDefault(require("./ApiCall")); +const MultiSearch_1 = tslib_1.__importDefault(require("./MultiSearch")); +const SearchOnlyCollection_1 = require("./SearchOnlyCollection"); +class SearchClient { + constructor(options) { var _a; options.sendApiKeyAsQueryParam = (_a = options.sendApiKeyAsQueryParam) !== null && _a !== void 0 ? _a : true; if (options.sendApiKeyAsQueryParam === true && @@ -19,15 +19,14 @@ var SearchClient = /** @class */ (function () { this.multiSearch = new MultiSearch_1.default(this.apiCall, this.configuration, true); this.individualCollections = {}; } - SearchClient.prototype.clearCache = function () { + clearCache() { this.multiSearch.clearCache(); // eslint-disable-next-line @typescript-eslint/no-unused-vars - Object.entries(this.individualCollections).forEach(function (_a) { - var _ = _a[0], collection = _a[1]; + Object.entries(this.individualCollections).forEach(([_, collection]) => { collection.documents().clearCache(); }); - }; - SearchClient.prototype.collections = function (collectionName) { + } + collections(collectionName) { if (!collectionName) { throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to " + "be searched must be specified. Use Typesense.Client if you need to access the collection object."); @@ -38,8 +37,7 @@ var SearchClient = /** @class */ (function () { } return this.individualCollections[collectionName]; } - }; - return SearchClient; -}()); + } +} exports.default = SearchClient; //# sourceMappingURL=SearchClient.js.map \ No newline at end of file diff --git a/lib/Typesense/SearchClient.js.map b/lib/Typesense/SearchClient.js.map index 1aa2a26e..7831f682 100644 --- a/lib/Typesense/SearchClient.js.map +++ b/lib/Typesense/SearchClient.js.map @@ -1 +1 @@ -{"version":3,"file":"SearchClient.js","sourceRoot":"","sources":["../../src/Typesense/SearchClient.ts"],"names":[],"mappings":";;;AAAA,0EAAsE;AACtE,8DAAgC;AAChC,sEAAwC;AAExC,+DAA8D;AAE9D;IAME,sBAAY,OAA6B;;QACvC,OAAO,CAAC,sBAAsB,GAAG,MAAA,OAAO,CAAC,sBAAsB,mCAAI,IAAI,CAAC;QACxE,IACE,OAAO,CAAC,sBAAsB,KAAK,IAAI;YACvC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI,EACpC,CAAC;YACD,OAAO,CAAC,IAAI,CACV,mIAAmI,CACpI,CAAC;YACF,OAAO,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,uBAAa,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,iCAAU,GAAV;QACE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAE9B,6DAA6D;QAC7D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,UAAC,EAAe;gBAAd,CAAC,QAAA,EAAE,UAAU,QAAA;YAChE,UAAU,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kCAAW,GAAX,UACE,cAAsB;QAEtB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,8FAA8F;gBAC5F,kGAAkG,CACrG,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7D,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,GAAG,IAAI,2CAAoB,CACnE,cAAc,EACd,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,CACnB,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACH,mBAAC;AAAD,CAAC,AApDD,IAoDC"} \ No newline at end of file +{"version":3,"file":"SearchClient.js","sourceRoot":"","sources":["../../src/Typesense/SearchClient.ts"],"names":[],"mappings":";;;AAAA,4EAAsE;AACtE,gEAAgC;AAChC,wEAAwC;AAExC,iEAA8D;AAE9D,MAAqB,YAAY;IAM/B,YAAY,OAA6B;;QACvC,OAAO,CAAC,sBAAsB,GAAG,MAAA,OAAO,CAAC,sBAAsB,mCAAI,IAAI,CAAC;QACxE,IACE,OAAO,CAAC,sBAAsB,KAAK,IAAI;YACvC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI,EACpC,CAAC;YACD,OAAO,CAAC,IAAI,CACV,mIAAmI,CACpI,CAAC;YACF,OAAO,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,uBAAa,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,UAAU;QACR,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAE9B,6DAA6D;QAC7D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE;YACrE,UAAU,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CACT,cAAsB;QAEtB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,8FAA8F;gBAC5F,kGAAkG,CACrG,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7D,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,GAAG,IAAI,2CAAoB,CACnE,cAAc,EACd,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,CACnB,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;CACF;AApDD,+BAoDC"} \ No newline at end of file diff --git a/lib/Typesense/SearchOnlyCollection.js b/lib/Typesense/SearchOnlyCollection.js index 3c41aca0..cd7892d9 100644 --- a/lib/Typesense/SearchOnlyCollection.js +++ b/lib/Typesense/SearchOnlyCollection.js @@ -1,18 +1,17 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SearchOnlyCollection = void 0; -var SearchOnlyDocuments_1 = require("./SearchOnlyDocuments"); -var SearchOnlyCollection = /** @class */ (function () { - function SearchOnlyCollection(name, apiCall, configuration) { +const SearchOnlyDocuments_1 = require("./SearchOnlyDocuments"); +class SearchOnlyCollection { + constructor(name, apiCall, configuration) { this.name = name; this.apiCall = apiCall; this.configuration = configuration; this._documents = new SearchOnlyDocuments_1.SearchOnlyDocuments(this.name, this.apiCall, this.configuration); } - SearchOnlyCollection.prototype.documents = function () { + documents() { return this._documents; - }; - return SearchOnlyCollection; -}()); + } +} exports.SearchOnlyCollection = SearchOnlyCollection; //# sourceMappingURL=SearchOnlyCollection.js.map \ No newline at end of file diff --git a/lib/Typesense/SearchOnlyCollection.js.map b/lib/Typesense/SearchOnlyCollection.js.map index c52e0a87..43344d2b 100644 --- a/lib/Typesense/SearchOnlyCollection.js.map +++ b/lib/Typesense/SearchOnlyCollection.js.map @@ -1 +1 @@ -{"version":3,"file":"SearchOnlyCollection.js","sourceRoot":"","sources":["../../src/Typesense/SearchOnlyCollection.ts"],"names":[],"mappings":";;;AAEA,6DAA4D;AAE5D;IAGE,8BACmB,IAAY,EACZ,OAAgB,EAChB,aAAkB;QAFlB,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAAK;QAEnC,IAAI,CAAC,UAAU,GAAG,IAAI,yCAAmB,CACvC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,CACnB,CAAC;IACJ,CAAC;IAED,wCAAS,GAAT;QACE,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACH,2BAAC;AAAD,CAAC,AAlBD,IAkBC;AAlBY,oDAAoB"} \ No newline at end of file +{"version":3,"file":"SearchOnlyCollection.js","sourceRoot":"","sources":["../../src/Typesense/SearchOnlyCollection.ts"],"names":[],"mappings":";;;AAEA,+DAA4D;AAE5D,MAAa,oBAAoB;IAG/B,YACmB,IAAY,EACZ,OAAgB,EAChB,aAAkB;QAFlB,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAAK;QAEnC,IAAI,CAAC,UAAU,GAAG,IAAI,yCAAmB,CACvC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,CACnB,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF;AAlBD,oDAkBC"} \ No newline at end of file diff --git a/lib/Typesense/SearchOnlyDocuments.js b/lib/Typesense/SearchOnlyDocuments.js index 11aa915e..27cc4257 100644 --- a/lib/Typesense/SearchOnlyDocuments.js +++ b/lib/Typesense/SearchOnlyDocuments.js @@ -1,50 +1,39 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SearchOnlyDocuments = void 0; -var tslib_1 = require("tslib"); -var RequestWithCache_1 = tslib_1.__importDefault(require("./RequestWithCache")); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var Utils_1 = require("./Utils"); -var RESOURCEPATH = "/documents"; -var SearchOnlyDocuments = /** @class */ (function () { - function SearchOnlyDocuments(collectionName, apiCall, configuration) { +const tslib_1 = require("tslib"); +const RequestWithCache_1 = tslib_1.__importDefault(require("./RequestWithCache")); +const Collections_1 = tslib_1.__importDefault(require("./Collections")); +const Utils_1 = require("./Utils"); +const RESOURCEPATH = "/documents"; +class SearchOnlyDocuments { + constructor(collectionName, apiCall, configuration) { this.collectionName = collectionName; this.apiCall = apiCall; this.configuration = configuration; this.requestWithCache = new RequestWithCache_1.default(); } - SearchOnlyDocuments.prototype.clearCache = function () { + clearCache() { this.requestWithCache.clearCache(); - }; - SearchOnlyDocuments.prototype.search = function (searchParameters_1) { - return tslib_1.__awaiter(this, arguments, void 0, function (searchParameters, _a) { - var additionalQueryParams, normalizedParams, queryParams; - var _b = _a === void 0 ? {} : _a, _c = _b.cacheSearchResultsForSeconds, cacheSearchResultsForSeconds = _c === void 0 ? this.configuration - .cacheSearchResultsForSeconds : _c, _d = _b.abortSignal, abortSignal = _d === void 0 ? null : _d; - return tslib_1.__generator(this, function (_e) { - additionalQueryParams = {}; - if (this.configuration.useServerSideSearchCache === true) { - additionalQueryParams["use_cache"] = true; - } - normalizedParams = (0, Utils_1.normalizeArrayableParams)(searchParameters); - queryParams = Object.assign({}, additionalQueryParams, normalizedParams); - return [2 /*return*/, this.requestWithCache.perform(this.apiCall, this.apiCall.get, [this.endpointPath("search"), queryParams, { abortSignal: abortSignal }], { - cacheResponseForSeconds: cacheSearchResultsForSeconds, - })]; - }); + } + async search(searchParameters, { cacheSearchResultsForSeconds = this.configuration + .cacheSearchResultsForSeconds, abortSignal = null, } = {}) { + const additionalQueryParams = {}; + if (this.configuration.useServerSideSearchCache === true) { + additionalQueryParams["use_cache"] = true; + } + const normalizedParams = (0, Utils_1.normalizeArrayableParams)(searchParameters); + const queryParams = Object.assign({}, additionalQueryParams, normalizedParams); + return this.requestWithCache.perform(this.apiCall, this.apiCall.get, [this.endpointPath("search"), queryParams, { abortSignal }], { + cacheResponseForSeconds: cacheSearchResultsForSeconds, }); - }; - SearchOnlyDocuments.prototype.endpointPath = function (operation) { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(this.collectionName).concat(RESOURCEPATH).concat(operation === undefined ? "" : "/" + operation); - }; - Object.defineProperty(SearchOnlyDocuments, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return SearchOnlyDocuments; -}()); + } + endpointPath(operation) { + return `${Collections_1.default.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${operation === undefined ? "" : "/" + operation}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.SearchOnlyDocuments = SearchOnlyDocuments; //# sourceMappingURL=SearchOnlyDocuments.js.map \ No newline at end of file diff --git a/lib/Typesense/SearchOnlyDocuments.js.map b/lib/Typesense/SearchOnlyDocuments.js.map index 7a91533a..92d456f3 100644 --- a/lib/Typesense/SearchOnlyDocuments.js.map +++ b/lib/Typesense/SearchOnlyDocuments.js.map @@ -1 +1 @@ -{"version":3,"file":"SearchOnlyDocuments.js","sourceRoot":"","sources":["../../src/Typesense/SearchOnlyDocuments.ts"],"names":[],"mappings":";;;;AAAA,gFAAkD;AAGlD,sEAAwC;AASxC,iCAAmD;AAEnD,IAAM,YAAY,GAAG,YAAY,CAAC;AAElC;IAKE,6BACY,cAAsB,EACtB,OAAgB,EAChB,aAA4B;QAF5B,mBAAc,GAAd,cAAc,CAAQ;QACtB,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAAe;QAL9B,qBAAgB,GAAqB,IAAI,0BAAgB,EAAE,CAAC;IAMnE,CAAC;IAEJ,wCAAU,GAAV;QACE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAEK,oCAAM,GAAZ;oEACE,gBAAuD,EACvD,EAIqB;;gBAJrB,qBAImB,EAAE,KAAA,EAHnB,oCAC+B,EAD/B,4BAA4B,mBAAG,IAAI,CAAC,aAAa;iBAC9C,4BAA4B,KAAA,EAC/B,mBAAkB,EAAlB,WAAW,mBAAG,IAAI,KAAA;;gBAGd,qBAAqB,GAAG,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,aAAa,CAAC,wBAAwB,KAAK,IAAI,EAAE,CAAC;oBACzD,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;gBAC5C,CAAC;gBACK,gBAAgB,GAAG,IAAA,gCAAwB,EAAC,gBAAgB,CAAC,CAAC;gBAC9D,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,EAAE,EACF,qBAAqB,EACrB,gBAAgB,CACjB,CAAC;gBAEF,sBAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAChB,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,EAAE,WAAW,aAAA,EAAE,CAAC,EAC3D;wBACE,uBAAuB,EAAE,4BAA4B;qBACtD,CAC4B,EAAC;;;KACjC;IAES,0CAAY,GAAtB,UAAuB,SAAkB;QACvC,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,IAAI,CAAC,cAAc,SAAG,YAAY,SACtE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAC9C,CAAC;IACL,CAAC;IAED,sBAAW,mCAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,0BAAC;AAAD,CAAC,AArDD,IAqDC;AArDY,kDAAmB"} \ No newline at end of file +{"version":3,"file":"SearchOnlyDocuments.js","sourceRoot":"","sources":["../../src/Typesense/SearchOnlyDocuments.ts"],"names":[],"mappings":";;;;AAAA,kFAAkD;AAGlD,wEAAwC;AASxC,mCAAmD;AAEnD,MAAM,YAAY,GAAG,YAAY,CAAC;AAElC,MAAa,mBAAmB;IAK9B,YACY,cAAsB,EACtB,OAAgB,EAChB,aAA4B;QAF5B,mBAAc,GAAd,cAAc,CAAQ;QACtB,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAAe;QAL9B,qBAAgB,GAAqB,IAAI,0BAAgB,EAAE,CAAC;IAMnE,CAAC;IAEJ,UAAU;QACR,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CACV,gBAAuD,EACvD,EACE,4BAA4B,GAAG,IAAI,CAAC,aAAa;SAC9C,4BAA4B,EAC/B,WAAW,GAAG,IAAI,MACD,EAAE;QAErB,MAAM,qBAAqB,GAAG,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,aAAa,CAAC,wBAAwB,KAAK,IAAI,EAAE,CAAC;YACzD,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QAC5C,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAA,gCAAwB,EAAC,gBAAgB,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,EAAE,EACF,qBAAqB,EACrB,gBAAgB,CACjB,CAAC;QAEF,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAChB,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,CAAC,EAC3D;YACE,uBAAuB,EAAE,4BAA4B;SACtD,CAC4B,CAAC;IAClC,CAAC;IAES,YAAY,CAAC,SAAkB;QACvC,OAAO,GAAG,qBAAW,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,GAAG,YAAY,GACtE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,SACvC,EAAE,CAAC;IACL,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AArDD,kDAqDC"} \ No newline at end of file diff --git a/lib/Typesense/Stats.js b/lib/Typesense/Stats.js index f00c45d8..a212ce5e 100644 --- a/lib/Typesense/Stats.js +++ b/lib/Typesense/Stats.js @@ -1,19 +1,13 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/stats.json"; -var Metrics = /** @class */ (function () { - function Metrics(apiCall) { +const RESOURCEPATH = "/stats.json"; +class Metrics { + constructor(apiCall) { this.apiCall = apiCall; } - Metrics.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(RESOURCEPATH)]; - }); - }); - }; - return Metrics; -}()); + async retrieve() { + return this.apiCall.get(RESOURCEPATH); + } +} exports.default = Metrics; //# sourceMappingURL=Stats.js.map \ No newline at end of file diff --git a/lib/Typesense/Stats.js.map b/lib/Typesense/Stats.js.map index d45c873b..aa2a4579 100644 --- a/lib/Typesense/Stats.js.map +++ b/lib/Typesense/Stats.js.map @@ -1 +1 @@ -{"version":3,"file":"Stats.js","sourceRoot":"","sources":["../../src/Typesense/Stats.ts"],"names":[],"mappings":";;;AAEA,IAAM,YAAY,GAAG,aAAa,CAAC;AAsBnC;IACE,iBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC;;;KACvC;IACH,cAAC;AAAD,CAAC,AAND,IAMC"} \ No newline at end of file +{"version":3,"file":"Stats.js","sourceRoot":"","sources":["../../src/Typesense/Stats.ts"],"names":[],"mappings":";;AAEA,MAAM,YAAY,GAAG,aAAa,CAAC;AAsBnC,MAAqB,OAAO;IAC1B,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;CACF;AAND,0BAMC"} \ No newline at end of file diff --git a/lib/Typesense/Stemming.js b/lib/Typesense/Stemming.js index b02f7894..781631b4 100644 --- a/lib/Typesense/Stemming.js +++ b/lib/Typesense/Stemming.js @@ -1,17 +1,17 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var StemmingDictionaries_1 = tslib_1.__importDefault(require("./StemmingDictionaries")); -var StemmingDictionary_1 = tslib_1.__importDefault(require("./StemmingDictionary")); -var RESOURCEPATH = "/stemming"; -var Stemming = /** @class */ (function () { - function Stemming(apiCall) { +const tslib_1 = require("tslib"); +const StemmingDictionaries_1 = tslib_1.__importDefault(require("./StemmingDictionaries")); +const StemmingDictionary_1 = tslib_1.__importDefault(require("./StemmingDictionary")); +const RESOURCEPATH = "/stemming"; +class Stemming { + constructor(apiCall) { this.apiCall = apiCall; this.individualStemmingDictionaries = {}; this.apiCall = apiCall; this._stemmingDictionaries = new StemmingDictionaries_1.default(this.apiCall); } - Stemming.prototype.dictionaries = function (id) { + dictionaries(id) { if (id === undefined) { return this._stemmingDictionaries; } @@ -21,15 +21,10 @@ var Stemming = /** @class */ (function () { } return this.individualStemmingDictionaries[id]; } - }; - Object.defineProperty(Stemming, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Stemming; -}()); + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = Stemming; //# sourceMappingURL=Stemming.js.map \ No newline at end of file diff --git a/lib/Typesense/Stemming.js.map b/lib/Typesense/Stemming.js.map index ef37ddff..dc3e4879 100644 --- a/lib/Typesense/Stemming.js.map +++ b/lib/Typesense/Stemming.js.map @@ -1 +1 @@ -{"version":3,"file":"Stemming.js","sourceRoot":"","sources":["../../src/Typesense/Stemming.ts"],"names":[],"mappings":";;;AACA,wFAA0D;AAC1D,oFAAsD;AAEtD,IAAM,YAAY,GAAG,WAAW,CAAC;AAEjC;IAOE,kBAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAL5B,mCAA8B,GAG3C,EAAE,CAAC;QAGL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,qBAAqB,GAAG,IAAI,8BAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAID,+BAAY,GAAZ,UAAa,EAAW;QACtB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1D,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,GAAG,IAAI,4BAAkB,CAC9D,EAAE,EACF,IAAI,CAAC,OAAO,CACb,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,sBAAW,wBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,eAAC;AAAD,CAAC,AA/BD,IA+BC"} \ No newline at end of file +{"version":3,"file":"Stemming.js","sourceRoot":"","sources":["../../src/Typesense/Stemming.ts"],"names":[],"mappings":";;;AACA,0FAA0D;AAC1D,sFAAsD;AAEtD,MAAM,YAAY,GAAG,WAAW,CAAC;AAEjC,MAAqB,QAAQ;IAO3B,YAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAL5B,mCAA8B,GAG3C,EAAE,CAAC;QAGL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,qBAAqB,GAAG,IAAI,8BAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAID,YAAY,CAAC,EAAW;QACtB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1D,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,GAAG,IAAI,4BAAkB,CAC9D,EAAE,EACF,IAAI,CAAC,OAAO,CACb,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AA/BD,2BA+BC"} \ No newline at end of file diff --git a/lib/Typesense/StemmingDictionaries.js b/lib/Typesense/StemmingDictionaries.js index 0add460b..712a6aaf 100644 --- a/lib/Typesense/StemmingDictionaries.js +++ b/lib/Typesense/StemmingDictionaries.js @@ -1,58 +1,38 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/stemming/dictionaries"; -var StemmingDictionaries = /** @class */ (function () { - function StemmingDictionaries(apiCall) { +const RESOURCEPATH = "/stemming/dictionaries"; +class StemmingDictionaries { + constructor(apiCall) { this.apiCall = apiCall; this.apiCall = apiCall; } - StemmingDictionaries.prototype.upsert = function (id, wordRootCombinations) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var wordRootCombinationsInJSONLFormat, resultsInJSONLFormat; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: - wordRootCombinationsInJSONLFormat = Array.isArray(wordRootCombinations) - ? wordRootCombinations.map(function (combo) { return JSON.stringify(combo); }).join("\n") - : wordRootCombinations; - return [4 /*yield*/, this.apiCall.performRequest("post", this.endpointPath("import"), { - queryParameters: { id: id }, - bodyParameters: wordRootCombinationsInJSONLFormat, - additionalHeaders: { "Content-Type": "text/plain" }, - skipConnectionTimeout: true, - })]; - case 1: - resultsInJSONLFormat = _a.sent(); - return [2 /*return*/, Array.isArray(wordRootCombinations) - ? resultsInJSONLFormat - .split("\n") - .map(function (line) { return JSON.parse(line); }) - : resultsInJSONLFormat]; - } - }); + async upsert(id, wordRootCombinations) { + const wordRootCombinationsInJSONLFormat = Array.isArray(wordRootCombinations) + ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join("\n") + : wordRootCombinations; + const resultsInJSONLFormat = await this.apiCall.performRequest("post", this.endpointPath("import"), { + queryParameters: { id }, + bodyParameters: wordRootCombinationsInJSONLFormat, + additionalHeaders: { "Content-Type": "text/plain" }, + skipConnectionTimeout: true, }); - }; - StemmingDictionaries.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - StemmingDictionaries.prototype.endpointPath = function (operation) { + return Array.isArray(wordRootCombinations) + ? resultsInJSONLFormat + .split("\n") + .map((line) => JSON.parse(line)) + : resultsInJSONLFormat; + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { return operation === undefined - ? "".concat(StemmingDictionaries.RESOURCEPATH) - : "".concat(StemmingDictionaries.RESOURCEPATH, "/").concat(encodeURIComponent(operation)); - }; - Object.defineProperty(StemmingDictionaries, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return StemmingDictionaries; -}()); + ? `${StemmingDictionaries.RESOURCEPATH}` + : `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = StemmingDictionaries; //# sourceMappingURL=StemmingDictionaries.js.map \ No newline at end of file diff --git a/lib/Typesense/StemmingDictionaries.js.map b/lib/Typesense/StemmingDictionaries.js.map index f38ae9ae..88e341f5 100644 --- a/lib/Typesense/StemmingDictionaries.js.map +++ b/lib/Typesense/StemmingDictionaries.js.map @@ -1 +1 @@ -{"version":3,"file":"StemmingDictionaries.js","sourceRoot":"","sources":["../../src/Typesense/StemmingDictionaries.ts"],"names":[],"mappings":";;;AAGA,IAAM,YAAY,GAAG,wBAAwB,CAAC;AAM9C;IACE,8BAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEK,qCAAM,GAAZ,UACE,EAAU,EACV,oBAA+D;;;;;;wBAEzD,iCAAiC,GAAG,KAAK,CAAC,OAAO,CACrD,oBAAoB,CACrB;4BACC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAArB,CAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;4BACvE,CAAC,CAAC,oBAAoB,CAAC;wBAEI,qBAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAE5D,MAAM,EACN,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC3B;gCACE,eAAe,EAAE,EAAC,EAAE,IAAA,EAAC;gCACrB,cAAc,EAAE,iCAAiC;gCACjD,iBAAiB,EAAE,EAAC,cAAc,EAAE,YAAY,EAAC;gCACjD,qBAAqB,EAAE,IAAI;6BAC5B,CACF,EAAA;;wBAVK,oBAAoB,GAAG,SAU5B;wBAED,sBAAO,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC;gCACxC,CAAC,CAAC,oBAAoB;qCACjB,KAAK,CAAC,IAAI,CAAC;qCACX,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmC,EAAlD,CAAkD,CAAC;gCACtE,CAAC,CAAC,oBAAoB,EAAC;;;;KAC1B;IAEK,uCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,CACpB,EAAC;;;KACH;IAEO,2CAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,SAAS,KAAK,SAAS;YAC5B,CAAC,CAAC,UAAG,oBAAoB,CAAC,YAAY,CAAE;YACxC,CAAC,CAAC,UAAG,oBAAoB,CAAC,YAAY,cAAI,kBAAkB,CAAC,SAAS,CAAC,CAAE,CAAC;IAC9E,CAAC;IAED,sBAAW,oCAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,2BAAC;AAAD,CAAC,AAjDD,IAiDC"} \ No newline at end of file +{"version":3,"file":"StemmingDictionaries.js","sourceRoot":"","sources":["../../src/Typesense/StemmingDictionaries.ts"],"names":[],"mappings":";;AAGA,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAM9C,MAAqB,oBAAoB;IACvC,YAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM,CACV,EAAU,EACV,oBAA+D;QAE/D,MAAM,iCAAiC,GAAG,KAAK,CAAC,OAAO,CACrD,oBAAoB,CACrB;YACC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACvE,CAAC,CAAC,oBAAoB,CAAC;QAEzB,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAE5D,MAAM,EACN,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC3B;YACE,eAAe,EAAE,EAAC,EAAE,EAAC;YACrB,cAAc,EAAE,iCAAiC;YACjD,iBAAiB,EAAE,EAAC,cAAc,EAAE,YAAY,EAAC;YACjD,qBAAqB,EAAE,IAAI;SAC5B,CACF,CAAC;QAEF,OAAO,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC;YACxC,CAAC,CAAC,oBAAoB;iBACjB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmC,CAAC;YACtE,CAAC,CAAC,oBAAoB,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,EAAE,CACpB,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,SAAkB;QACrC,OAAO,SAAS,KAAK,SAAS;YAC5B,CAAC,CAAC,GAAG,oBAAoB,CAAC,YAAY,EAAE;YACxC,CAAC,CAAC,GAAG,oBAAoB,CAAC,YAAY,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;IAC9E,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAjDD,uCAiDC"} \ No newline at end of file diff --git a/lib/Typesense/StemmingDictionary.js b/lib/Typesense/StemmingDictionary.js index 035a908c..fd357d9d 100644 --- a/lib/Typesense/StemmingDictionary.js +++ b/lib/Typesense/StemmingDictionary.js @@ -1,23 +1,18 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var StemmingDictionaries_1 = tslib_1.__importDefault(require("./StemmingDictionaries")); -var StemmingDictionary = /** @class */ (function () { - function StemmingDictionary(id, apiCall) { +const tslib_1 = require("tslib"); +const StemmingDictionaries_1 = tslib_1.__importDefault(require("./StemmingDictionaries")); +class StemmingDictionary { + constructor(id, apiCall) { this.id = id; this.apiCall = apiCall; } - StemmingDictionary.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - StemmingDictionary.prototype.endpointPath = function () { - return "".concat(StemmingDictionaries_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.id)); - }; - return StemmingDictionary; -}()); + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath() { + return `${StemmingDictionaries_1.default.RESOURCEPATH}/${encodeURIComponent(this.id)}`; + } +} exports.default = StemmingDictionary; //# sourceMappingURL=StemmingDictionary.js.map \ No newline at end of file diff --git a/lib/Typesense/StemmingDictionary.js.map b/lib/Typesense/StemmingDictionary.js.map index 72aa2586..e2613bdb 100644 --- a/lib/Typesense/StemmingDictionary.js.map +++ b/lib/Typesense/StemmingDictionary.js.map @@ -1 +1 @@ -{"version":3,"file":"StemmingDictionary.js","sourceRoot":"","sources":["../../src/Typesense/StemmingDictionary.ts"],"names":[],"mappings":";;;AACA,wFAA0D;AAY1D;IACE,4BACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,qCAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA2B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACxE;IAEO,yCAAY,GAApB;QACE,OAAO,UAAG,8BAAoB,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;IAC/E,CAAC;IACH,yBAAC;AAAD,CAAC,AAbD,IAaC"} \ No newline at end of file +{"version":3,"file":"StemmingDictionary.js","sourceRoot":"","sources":["../../src/Typesense/StemmingDictionary.ts"],"names":[],"mappings":";;;AACA,0FAA0D;AAY1D,MAAqB,kBAAkB;IACrC,YACU,EAAU,EACV,OAAgB;QADhB,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA2B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACzE,CAAC;IAEO,YAAY;QAClB,OAAO,GAAG,8BAAoB,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/E,CAAC;CACF;AAbD,qCAaC"} \ No newline at end of file diff --git a/lib/Typesense/Stopword.js b/lib/Typesense/Stopword.js index 83547225..cecf5777 100644 --- a/lib/Typesense/Stopword.js +++ b/lib/Typesense/Stopword.js @@ -1,30 +1,21 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Stopwords_1 = tslib_1.__importDefault(require("./Stopwords")); -var Stopword = /** @class */ (function () { - function Stopword(stopwordId, apiCall) { +const tslib_1 = require("tslib"); +const Stopwords_1 = tslib_1.__importDefault(require("./Stopwords")); +class Stopword { + constructor(stopwordId, apiCall) { this.stopwordId = stopwordId; this.apiCall = apiCall; } - Stopword.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Stopword.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Stopword.prototype.endpointPath = function () { - return "".concat(Stopwords_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.stopwordId)); - }; - return Stopword; -}()); + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Stopwords_1.default.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`; + } +} exports.default = Stopword; //# sourceMappingURL=Stopword.js.map \ No newline at end of file diff --git a/lib/Typesense/Stopword.js.map b/lib/Typesense/Stopword.js.map index 9523cdce..d40e789f 100644 --- a/lib/Typesense/Stopword.js.map +++ b/lib/Typesense/Stopword.js.map @@ -1 +1 @@ -{"version":3,"file":"Stopword.js","sourceRoot":"","sources":["../../src/Typesense/Stopword.ts"],"names":[],"mappings":";;;AACA,kEAA8D;AAY9D;IACE,kBACU,UAAkB,EAClB,OAAgB;QADhB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,2BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAiB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC9D;IAEK,yBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEO,+BAAY,GAApB;QACE,OAAO,UAAG,mBAAS,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAE,CAAC;IAC5E,CAAC;IACH,eAAC;AAAD,CAAC,AAjBD,IAiBC"} \ No newline at end of file +{"version":3,"file":"Stopword.js","sourceRoot":"","sources":["../../src/Typesense/Stopword.ts"],"names":[],"mappings":";;;AACA,oEAA8D;AAY9D,MAAqB,QAAQ;IAC3B,YACU,UAAkB,EAClB,OAAgB;QADhB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAiB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACxE,CAAC;IAEO,YAAY;QAClB,OAAO,GAAG,mBAAS,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;IAC5E,CAAC;CACF;AAjBD,2BAiBC"} \ No newline at end of file diff --git a/lib/Typesense/Stopwords.js b/lib/Typesense/Stopwords.js index 6caff949..eabe7ba9 100644 --- a/lib/Typesense/Stopwords.js +++ b/lib/Typesense/Stopwords.js @@ -1,36 +1,22 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var RESOURCEPATH = "/stopwords"; -var Stopwords = /** @class */ (function () { - function Stopwords(apiCall) { +const RESOURCEPATH = "/stopwords"; +class Stopwords { + constructor(apiCall) { this.apiCall = apiCall; } - Stopwords.prototype.upsert = function (stopwordId, params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(stopwordId), params)]; - }); - }); - }; - Stopwords.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Stopwords.prototype.endpointPath = function (operation) { - return "".concat(Stopwords.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(Stopwords, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Stopwords; -}()); + async upsert(stopwordId, params) { + return this.apiCall.put(this.endpointPath(stopwordId), params); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${Stopwords.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = Stopwords; //# sourceMappingURL=Stopwords.js.map \ No newline at end of file diff --git a/lib/Typesense/Stopwords.js.map b/lib/Typesense/Stopwords.js.map index f02de760..b259ab6f 100644 --- a/lib/Typesense/Stopwords.js.map +++ b/lib/Typesense/Stopwords.js.map @@ -1 +1 @@ -{"version":3,"file":"Stopwords.js","sourceRoot":"","sources":["../../src/Typesense/Stopwords.ts"],"names":[],"mappings":";;;AAGA,IAAM,YAAY,GAAG,YAAY,CAAC;AAWlC;IACE,mBAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElC,0BAAM,GAAZ,UACE,UAAkB,EAClB,MAA4B;;;gBAE5B,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAC7B,MAAM,CACP,EAAC;;;KACH;IAEK,4BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACvE;IAEO,gCAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,SAAS,CAAC,YAAY,SAC9B,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAClE,CAAC;IACL,CAAC;IAED,sBAAW,yBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,gBAAC;AAAD,CAAC,AA1BD,IA0BC"} \ No newline at end of file +{"version":3,"file":"Stopwords.js","sourceRoot":"","sources":["../../src/Typesense/Stopwords.ts"],"names":[],"mappings":";;AAGA,MAAM,YAAY,GAAG,YAAY,CAAC;AAWlC,MAAqB,SAAS;IAC5B,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC,KAAK,CAAC,MAAM,CACV,UAAkB,EAClB,MAA4B;QAE5B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAC7B,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAA0B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACxE,CAAC;IAEO,YAAY,CAAC,SAAkB;QACrC,OAAO,GAAG,SAAS,CAAC,YAAY,GAC9B,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CACnE,EAAE,CAAC;IACL,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AA1BD,4BA0BC"} \ No newline at end of file diff --git a/lib/Typesense/Synonym.js b/lib/Typesense/Synonym.js index fb4830a7..bc45ff49 100644 --- a/lib/Typesense/Synonym.js +++ b/lib/Typesense/Synonym.js @@ -1,32 +1,23 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var Synonyms_1 = tslib_1.__importDefault(require("./Synonyms")); -var Synonym = /** @class */ (function () { - function Synonym(collectionName, synonymId, apiCall) { +const tslib_1 = require("tslib"); +const Collections_1 = tslib_1.__importDefault(require("./Collections")); +const Synonyms_1 = tslib_1.__importDefault(require("./Synonyms")); +class Synonym { + constructor(collectionName, synonymId, apiCall) { this.collectionName = collectionName; this.synonymId = synonymId; this.apiCall = apiCall; } - Synonym.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Synonym.prototype.delete = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.delete(this.endpointPath())]; - }); - }); - }; - Synonym.prototype.endpointPath = function () { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Synonyms_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.synonymId)); - }; - return Synonym; -}()); + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + async delete() { + return this.apiCall.delete(this.endpointPath()); + } + endpointPath() { + return `${Collections_1.default.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms_1.default.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`; + } +} exports.default = Synonym; //# sourceMappingURL=Synonym.js.map \ No newline at end of file diff --git a/lib/Typesense/Synonym.js.map b/lib/Typesense/Synonym.js.map index 1278adf2..8059a765 100644 --- a/lib/Typesense/Synonym.js.map +++ b/lib/Typesense/Synonym.js.map @@ -1 +1 @@ -{"version":3,"file":"Synonym.js","sourceRoot":"","sources":["../../src/Typesense/Synonym.ts"],"names":[],"mappings":";;;AACA,sEAAwC;AACxC,gEAA2D;AAU3D;IACE,iBACU,cAAsB,EACtB,SAAiB,EACjB,OAAgB;QAFhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,cAAS,GAAT,SAAS,CAAQ;QACjB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEE,0BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAgB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KAC7D;IAEK,wBAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAsB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACtE;IAEO,8BAAY,GAApB;QACE,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAG,kBAAQ,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAE,CAAC;IAChJ,CAAC;IACH,cAAC;AAAD,CAAC,AAlBD,IAkBC"} \ No newline at end of file +{"version":3,"file":"Synonym.js","sourceRoot":"","sources":["../../src/Typesense/Synonym.ts"],"names":[],"mappings":";;;AACA,wEAAwC;AACxC,kEAA2D;AAU3D,MAAqB,OAAO;IAC1B,YACU,cAAsB,EACtB,SAAiB,EACjB,OAAgB;QAFhB,mBAAc,GAAd,cAAc,CAAQ;QACtB,cAAS,GAAT,SAAS,CAAQ;QACjB,YAAO,GAAP,OAAO,CAAS;IACvB,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAgB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAsB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACvE,CAAC;IAEO,YAAY;QAClB,OAAO,GAAG,qBAAW,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,kBAAQ,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IAChJ,CAAC;CACF;AAlBD,0BAkBC"} \ No newline at end of file diff --git a/lib/Typesense/Synonyms.js b/lib/Typesense/Synonyms.js index cef6cb72..73daf502 100644 --- a/lib/Typesense/Synonyms.js +++ b/lib/Typesense/Synonyms.js @@ -1,38 +1,25 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var Collections_1 = tslib_1.__importDefault(require("./Collections")); -var RESOURCEPATH = "/synonyms"; -var Synonyms = /** @class */ (function () { - function Synonyms(collectionName, apiCall) { +const tslib_1 = require("tslib"); +const Collections_1 = tslib_1.__importDefault(require("./Collections")); +const RESOURCEPATH = "/synonyms"; +class Synonyms { + constructor(collectionName, apiCall) { this.collectionName = collectionName; this.apiCall = apiCall; } - Synonyms.prototype.upsert = function (synonymId, params) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.put(this.endpointPath(synonymId), params)]; - }); - }); - }; - Synonyms.prototype.retrieve = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - return tslib_1.__generator(this, function (_a) { - return [2 /*return*/, this.apiCall.get(this.endpointPath())]; - }); - }); - }; - Synonyms.prototype.endpointPath = function (operation) { - return "".concat(Collections_1.default.RESOURCEPATH, "/").concat(encodeURIComponent(this.collectionName)).concat(Synonyms.RESOURCEPATH).concat(operation === undefined ? "" : "/" + encodeURIComponent(operation)); - }; - Object.defineProperty(Synonyms, "RESOURCEPATH", { - get: function () { - return RESOURCEPATH; - }, - enumerable: false, - configurable: true - }); - return Synonyms; -}()); + async upsert(synonymId, params) { + return this.apiCall.put(this.endpointPath(synonymId), params); + } + async retrieve() { + return this.apiCall.get(this.endpointPath()); + } + endpointPath(operation) { + return `${Collections_1.default.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; + } + static get RESOURCEPATH() { + return RESOURCEPATH; + } +} exports.default = Synonyms; //# sourceMappingURL=Synonyms.js.map \ No newline at end of file diff --git a/lib/Typesense/Synonyms.js.map b/lib/Typesense/Synonyms.js.map index 08c256ac..529153d5 100644 --- a/lib/Typesense/Synonyms.js.map +++ b/lib/Typesense/Synonyms.js.map @@ -1 +1 @@ -{"version":3,"file":"Synonyms.js","sourceRoot":"","sources":["../../src/Typesense/Synonyms.ts"],"names":[],"mappings":";;;AACA,sEAAwC;AAGxC,IAAM,YAAY,GAAG,WAAW,CAAC;AAajC;IACE,kBAAoB,cAAsB,EAAU,OAAgB;QAAhD,mBAAc,GAAd,cAAc,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAElE,yBAAM,GAAZ,UACE,SAAiB,EACjB,MAA2B;;;gBAE3B,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAC5B,MAAM,CACP,EAAC;;;KACH;IAEK,2BAAQ,GAAd;;;gBACE,sBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAyB,IAAI,CAAC,YAAY,EAAE,CAAC,EAAC;;;KACtE;IAEO,+BAAY,GAApB,UAAqB,SAAkB;QACrC,OAAO,UAAG,qBAAW,CAAC,YAAY,cAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,SAC3E,QAAQ,CAAC,YAAY,SACpB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAE,CAAC;IAC1E,CAAC;IAED,sBAAW,wBAAY;aAAvB;YACE,OAAO,YAAY,CAAC;QACtB,CAAC;;;OAAA;IACH,eAAC;AAAD,CAAC,AA1BD,IA0BC"} \ No newline at end of file +{"version":3,"file":"Synonyms.js","sourceRoot":"","sources":["../../src/Typesense/Synonyms.ts"],"names":[],"mappings":";;;AACA,wEAAwC;AAGxC,MAAM,YAAY,GAAG,WAAW,CAAC;AAajC,MAAqB,QAAQ;IAC3B,YAAoB,cAAsB,EAAU,OAAgB;QAAhD,mBAAc,GAAd,cAAc,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExE,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,MAA2B;QAE3B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAC5B,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAyB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACvE,CAAC;IAEO,YAAY,CAAC,SAAkB;QACrC,OAAO,GAAG,qBAAW,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,GAC3E,QAAQ,CAAC,YACX,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1E,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AA1BD,2BA0BC"} \ No newline at end of file diff --git a/lib/Typesense/Utils.js b/lib/Typesense/Utils.js index d5e5a8b6..83495137 100644 --- a/lib/Typesense/Utils.js +++ b/lib/Typesense/Utils.js @@ -1,18 +1,17 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.normalizeArrayableParams = normalizeArrayableParams; -var tslib_1 = require("tslib"); -var Documents_1 = require("./Documents"); +const Documents_1 = require("./Documents"); function hasNoArrayValues(params) { return Object.keys(Documents_1.arrayableParams) - .filter(function (key) { return params[key] !== undefined; }) - .every(function (key) { return isNonArrayValue(params[key]); }); + .filter((key) => params[key] !== undefined) + .every((key) => isNonArrayValue(params[key])); } function normalizeArrayableParams(params) { - var result = tslib_1.__assign({}, params); - var transformedValues = Object.keys(Documents_1.arrayableParams) - .filter(function (key) { return Array.isArray(result[key]); }) - .map(function (key) { + const result = { ...params }; + const transformedValues = Object.keys(Documents_1.arrayableParams) + .filter((key) => Array.isArray(result[key])) + .map((key) => { result[key] = result[key].join(","); return key; }); @@ -20,7 +19,7 @@ function normalizeArrayableParams(params) { return result; } if (!hasNoArrayValues(result)) { - throw new Error("Failed to normalize arrayable params: ".concat(JSON.stringify(result))); + throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(result)}`); } return result; } diff --git a/lib/Typesense/Utils.js.map b/lib/Typesense/Utils.js.map index aba3aa09..e7f895e1 100644 --- a/lib/Typesense/Utils.js.map +++ b/lib/Typesense/Utils.js.map @@ -1 +1 @@ -{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../src/Typesense/Utils.ts"],"names":[],"mappings":";;AAeA,4DAuBC;;AAtCD,yCAA8C;AAO9C,SAAS,gBAAgB,CACvB,MAA+B;IAE/B,OAAO,MAAM,CAAC,IAAI,CAAC,2BAAe,CAAC;SAChC,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAzB,CAAyB,CAAC;SAC1C,KAAK,CAAC,UAAC,GAAG,IAAK,OAAA,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAA5B,CAA4B,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,wBAAwB,CACtC,MAAS;IAET,IAAM,MAAM,wBAAQ,MAAM,CAAE,CAAC;IAE7B,IAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,2BAAe,CAAC;SACnD,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAA1B,CAA0B,CAAC;SAC3C,GAAG,CAAC,UAAC,GAAG;QACP,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEL,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,gDAAyC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAE,CAClE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACtB,KAAoC;IAEpC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"} \ No newline at end of file +{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../src/Typesense/Utils.ts"],"names":[],"mappings":";;AAeA,4DAuBC;AAtCD,2CAA8C;AAO9C,SAAS,gBAAgB,CACvB,MAA+B;IAE/B,OAAO,MAAM,CAAC,IAAI,CAAC,2BAAe,CAAC;SAChC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;SAC1C,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,wBAAwB,CACtC,MAAS;IAET,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,2BAAe,CAAC;SACnD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;SAC3C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEL,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,yCAAyC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAClE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACtB,KAAoC;IAEpC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"} \ No newline at end of file From d5afb344e34de1055ce544bbf21bb06929e51fed Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Fri, 7 Feb 2025 13:50:05 +0200 Subject: [PATCH 36/45] docs: update readme with search-only client guide - add documentation for `SearchClient` browser usage - clarify commonjs and esm bundle formats - update build tool information from browserify to tsup --- README.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a97dc04b..ff935b00 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Javascript client library for accessing the [Typesense HTTP API](https://github.com/typesense/typesense). -This library can be used both on the server-side and on the client-side. The library's [source](/src) is in ES6 and during build time, we transpile it to ES5 and generate two artifacts - [one](/lib) that can be used on the server-side and [another](/dist) that uses [Browserify](http://browserify.org/) and can be used on the client side. +This library can be used both on the server-side and on the client-side. The library's [source](/src) is in ES6 and during build time, we transpile it to ES5 and generate two artifacts - [one](/lib) CommonJS that can be used on Node and [another](/dist) CommonJS / ESM that uses [tsup](https://tsup.egoist.dev/) and can be used on the client side. ## Installation @@ -41,6 +41,27 @@ Tests are also a good place to know how the library works internally: [test](tes See [Configuration.ts](src/Typesense/Configuration.ts) for a list of all client configuration options. +## Search-only Client for Browser +You can create a search-only client instance for use in the browser by importing the `SearchClient` class from `typesense/dist`. + +```typescript +import { SearchClient } from 'typesense/dist' + +const client = new SearchClient({ + nodes: [ + { + host: 'localhost', + port: '8108', + protocol: 'http', + }, + ], + apiKey: 'xyz', + connectionTimeoutSeconds: 2, + healthcheckIntervalSeconds: 60, + +}) +``` + ### Examples Here are some examples with inline comments that walk you through how to use the client: [doc/examples](doc/examples) From 7ca86a5e0c1c0264b95b645adc5b4c4a914d725d Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Fri, 7 Feb 2025 15:13:56 +0200 Subject: [PATCH 37/45] build: minify browser bundle by default --- tsup.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tsup.config.ts b/tsup.config.ts index 3f21ff7e..01824457 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -35,6 +35,7 @@ export default defineConfig([ { ...baseOptions, sourcemap: true, + minify: true, dts: true, }, { From c9697762e053ea79b4806c9c06ebde1d58197135 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Fri, 7 Feb 2025 15:14:23 +0200 Subject: [PATCH 38/45] build: expose only lib and dist on package --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 840c0bd8..84acd775 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,7 @@ }, "files": [ "./dist", - "./lib", - "./src" + "./lib" ], "keywords": [ "typesense", From 9eb89cd3e4a775d7c89b6795c5da633d07b1070f Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Fri, 7 Feb 2025 15:18:34 +0200 Subject: [PATCH 39/45] build: rename entrypoint from `Typesense.ts` to `index.ts` for parcel - avoid module resolution failures from parcel not respecting the `exports` field --- dist/{typesense.d.mts => index.d.mts} | 0 dist/{typesense.d.ts => index.d.ts} | 0 dist/{typesense.js => index.js} | 0 dist/index.min.js | 11 + dist/index.min.js.map | 1 + dist/index.min.mjs | 11 + dist/index.min.mjs.map | 1 + dist/{typesense.mjs => index.mjs} | 0 dist/typesense.min.js | 1783 ------------------------- dist/typesense.min.js.map | 1 - dist/typesense.min.mjs | 1774 ------------------------ dist/typesense.min.mjs.map | 1 - lib/Typesense.js.map | 1 - lib/{Typesense.d.ts => index.d.ts} | 0 lib/{Typesense.js => index.js} | 2 +- lib/index.js.map | 1 + package.json | 10 +- src/{Typesense.ts => index.ts} | 0 tsup.config.ts | 6 +- 19 files changed, 34 insertions(+), 3569 deletions(-) rename dist/{typesense.d.mts => index.d.mts} (100%) rename dist/{typesense.d.ts => index.d.ts} (100%) rename dist/{typesense.js => index.js} (100%) create mode 100644 dist/index.min.js create mode 100644 dist/index.min.js.map create mode 100644 dist/index.min.mjs create mode 100644 dist/index.min.mjs.map rename dist/{typesense.mjs => index.mjs} (100%) delete mode 100644 dist/typesense.min.js delete mode 100644 dist/typesense.min.js.map delete mode 100644 dist/typesense.min.mjs delete mode 100644 dist/typesense.min.mjs.map delete mode 100644 lib/Typesense.js.map rename lib/{Typesense.d.ts => index.d.ts} (100%) rename lib/{Typesense.js => index.js} (92%) create mode 100644 lib/index.js.map rename src/{Typesense.ts => index.ts} (100%) diff --git a/dist/typesense.d.mts b/dist/index.d.mts similarity index 100% rename from dist/typesense.d.mts rename to dist/index.d.mts diff --git a/dist/typesense.d.ts b/dist/index.d.ts similarity index 100% rename from dist/typesense.d.ts rename to dist/index.d.ts diff --git a/dist/typesense.js b/dist/index.js similarity index 100% rename from dist/typesense.js rename to dist/index.js diff --git a/dist/index.min.js b/dist/index.min.js new file mode 100644 index 00000000..79454b39 --- /dev/null +++ b/dist/index.min.js @@ -0,0 +1,11 @@ +'use strict';var Ve=require('loglevel'),he=require('axios');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Ve__default=/*#__PURE__*/_interopDefault(Ve);var he__default=/*#__PURE__*/_interopDefault(he);var Fe=Object.create;var Ce=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,Je=Object.prototype.hasOwnProperty;var Se=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Qe=(r,e)=>{for(var t in e)Ce(r,t,{get:e[t],enumerable:true});},Be=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ze(e))!Je.call(r,n)&&n!==t&&Ce(r,n,{get:()=>e[n],enumerable:!(i=je(e,n))||i.enumerable});return r};var ve=(r,e,t)=>(t=r!=null?Fe(Le(r)):{},Be(!r||!r.__esModule?Ce(t,"default",{value:r,enumerable:true}):t,r));var Te=Se((Bt,be)=>{be.exports={};});var we=Se((Vt,Ee)=>{Ee.exports={};});var ke=Se((ti,Ie)=>{Ie.exports={};});var _e={};Qe(_e,{HTTPError:()=>R,ImportError:()=>y,MissingConfigurationError:()=>g,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>f,ObjectUnprocessable:()=>A,RequestMalformed:()=>_,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype);}};var R=class extends l{};var g=class extends l{};var x=class extends l{};var f=class extends l{};var A=class extends l{};var _=class extends l{};var b=class extends l{};var T=class extends l{};var y=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i;}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=true),e.randomizeNodes===true&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==undefined&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||false,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||Ve__default.default,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate();}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new g("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new g("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new g("Ensure that apiKey is set");return true}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return !["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case "https":e.port=443;break;case "http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12");}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]];}}};var De=ve(Te()),Ne=ve(we());var Ye="X-TYPESENSE-API-KEY",Pe=true,Ge=false,Oe=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1;}async get(e,t={},{abortSignal:i=null,responseType:n=undefined}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:n})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},n={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:n})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?he__default.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis):he__default.default.getAdapter(this.configuration.axiosAdapter):undefined}async performRequest(e,t,{queryParameters:i=null,bodyParameters:n=null,additionalHeaders:s={},abortSignal:a=null,responseType:h=undefined,skipConnectionTimeout:m=false,enableKeepAlive:C=undefined}){this.configuration.validate();let c=Date.now(),S,j=false;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),s,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:z=>z>0,transformResponse:[(z,L)=>{let Ae=z;return L!==void 0&&typeof z=="string"&&L["content-type"]&&L["content-type"].startsWith("application/json")&&(Ae=JSON.parse(z)),Ae}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Oe?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new De.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Oe?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new Ne.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),n&&(typeof n=="string"&&n.length!==0||typeof n=="object"&&Object.keys(n).length!==0)&&(o.data=n),a){let L=he__default.default.CancelToken.source();Q=()=>{j=!0,L.cancel();},a.addEventListener("abort",Q),o.cancelToken=L.token;}let d=await he__default.default(o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Pe),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,d.data?.message,o.data));throw this.customErrorForResponse(d,d.data?.message,o.data)}catch(o){if(j||this.setNodeHealthcheck(P,Ge),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${o?.code??""} ${o.message}${o.response==null?"":" - "+JSON.stringify(o.response?.data)}"`),j)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===true?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===true||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Pe)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Pe);});}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now();}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ye]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let n=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(n+=` | Server said: ${t}`);let s=new l(n,i,e.status);return e.status===400?s=new _(n):e.status===401?s=new b(n):e.status===404?s=new f(n):e.status===409?s=new x(n):e.status===422?s=new A(n):e.status>=500&&e.status<=599?s=new T(n):s=new R(n),s}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map;}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map;}async perform(e,t,i,n){let{cacheResponseForSeconds:s=120,maxSize:a=100}=n;if(s<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o);}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o);}return v}};var Re="/collections",p=class{constructor(e){this.apiCall=e;}async create(e,t={}){return this.apiCall.post(Re,e,t)}async retrieve(e={}){return this.apiCall.get(Re,e)}static get RESOURCEPATH(){return Re}};var Ue="/documents",J=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O;}clearCache(){this.requestWithCache.clearCache();}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let n={};this.configuration.useServerSideSearchCache===true&&(n.use_cache=true);let s=u(e),a=Object.assign({},n,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return `${p.RESOURCEPATH}/${this.collectionName}${Ue}${e===undefined?"":"/"+e}`}static get RESOURCEPATH(){return Ue}};var xe={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},He=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,D=class extends J{constructor(e,t,i){super(e,t,i);}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(s=>JSON.stringify(s)).join(` +`);}catch(s){throw s instanceof RangeError&&s.message.includes("Too many properties to enumerate")?new Error(`${s} + It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object + + Please try reducing the number of keys in your document, or using CURL to import your data. + `):new Error(s)}else i=e;let n=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:true,enableKeepAlive:!!He});if(Array.isArray(e)){let s=n.split(` +`).map(h=>JSON.parse(h)),a=s.filter(h=>h.success===false);if(a.length>0)throw new y(`${s.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:s.length-a.length});return s}else return n}async importStream(e,t={}){let n=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:true,enableKeepAlive:!!He})).split(` +`).map(a=>JSON.parse(a)),s=n.filter(a=>a.success===false);if(s.length>0)throw new y(`${n.length-s.length} documents imported successfully, ${s.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:e,options:t,failedItems:s,successCount:n.length-s.length});return n}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function $e(r){return Object.keys(xe).filter(e=>r[e]!==undefined).every(e=>Xe(r[e]))}function u(r){let e={...r};if(!Object.keys(xe).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&$e(e))return e;if(!$e(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Xe(r){return !Array.isArray(r)}var Ze="/multi_search",N=class{constructor(e,t,i=false){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O;}clearCache(){this.requestWithCache.clearCache();}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let n={};this.useTextContentType&&(n["content-type"]="text/plain");let s={};this.configuration.useServerSideSearchCache===true&&(s.use_cache=true);let a={...t,...s},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ze,h,m,n],{cacheResponseForSeconds:i})}};var ue=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new J(this.name,this.apiCall,this.configuration);}documents(){return this._documents}};var ge=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??true,e.sendApiKeyAsQueryParam===true&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=false),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new N(this.apiCall,this.configuration,true),this.individualCollections={};}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache();});}collections(e){if(e)return this.individualCollections[e]===undefined&&(this.individualCollections[e]=new ue(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var et="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t;}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return `${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return et}};var B=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var tt="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t;}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return `${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return tt}};var V=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var fe=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return `${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${D.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var Y=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new D(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall);}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof f)return false;throw e}}documents(e){return e?(this.individualDocuments[e]===undefined&&(this.individualDocuments[e]=new fe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===undefined?this._overrides:(this.individualOverrides[e]===undefined&&(this.individualOverrides[e]=new B(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===undefined?this._synonyms:(this.individualSynonyms[e]===undefined&&(this.individualSynonyms[e]=new V(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return `${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var qe="/aliases",$=class r{constructor(e){this.apiCall=e;}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(qe)}endpointPath(e){return `${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.name=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Me=ve(ke());var Ke="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e;}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Ke)}generateScopedSearchKey(e,t){let i=u(t),n=JSON.stringify(i),s=Buffer.from((0, Me.createHmac)("sha256",e).update(n).digest("base64")),a=e.substr(0,4),h=`${s}${a}${n}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return Ke}};var X=class{constructor(e,t){this.id=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var rt="/debug",Z=class{constructor(e){this.apiCall=e;}async retrieve(){return this.apiCall.get(rt)}};var it="/metrics.json",ee=class{constructor(e){this.apiCall=e;}async retrieve(){return this.apiCall.get(it)}};var nt="/stats.json",te=class{constructor(e){this.apiCall=e;}async retrieve(){return this.apiCall.get(nt)}};var st="/health",re=class{constructor(e){this.apiCall=e;}async retrieve(){return this.apiCall.get(st)}};var ot="/operations",ie=class{constructor(e){this.apiCall=e;}async perform(e,t={}){return this.apiCall.post(`${ot}/${e}`,{},t)}};var at="/presets",I=class r{constructor(e){this.apiCall=e;}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let n=t.value.searches.map(s=>u(s));return this.apiCall.put(this.endpointPath(e),{value:{searches:n}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return `${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return at}};var ne=class{constructor(e,t){this.presetId=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var lt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e;}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return `${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ct="/analytics/events",oe=class r{constructor(e){this.apiCall=e;this.apiCall=e;}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return `${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var pt="/analytics",ae=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new oe(this.apiCall);}rules(e){return e===undefined?this._analyticsRules:(this.individualAnalyticsRules[e]===undefined&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return pt}};var mt="/stopwords",K=class r{constructor(e){this.apiCall=e;}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return `${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return mt}};var le=class{constructor(e,t){this.stopwordId=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var dt="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e;}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return `${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return dt}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t;}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var We="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall);}async retrieve(){return this.apiCall.get(We)}models(e){return e===undefined?this._conversationsModels:(this.individualConversationModels[e]===undefined&&(this.individualConversationModels[e]=new ce(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return We}};var pe=class{constructor(e,t){this.id=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ht="/stemming/dictionaries",F=class r{constructor(e){this.apiCall=e;this.apiCall=e;}async upsert(e,t){let i=Array.isArray(t)?t.map(s=>JSON.stringify(s)).join(` +`):t,n=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:{id:e},bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:true});return Array.isArray(t)?n.split(` +`).map(s=>JSON.parse(s)):n}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return e===undefined?`${r.RESOURCEPATH}`:`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return ht}};var me=class{constructor(e,t){this.id=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(){return `${F.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ut="/stemming",de=class{constructor(e){this.apiCall=e;this.individualStemmingDictionaries={};this.apiCall=e,this._stemmingDictionaries=new F(this.apiCall);}dictionaries(e){return e===undefined?this._stemmingDictionaries:(this.individualStemmingDictionaries[e]===undefined&&(this.individualStemmingDictionaries[e]=new me(e,this.apiCall)),this.individualStemmingDictionaries[e])}static get RESOURCEPATH(){return ut}};var ye=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??false,this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new Z(this.apiCall),this.metrics=new ee(this.apiCall),this.stats=new te(this.apiCall),this.health=new re(this.apiCall),this.operations=new ie(this.apiCall),this.multiSearch=new N(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new ae(this.apiCall),this.stemming=new de(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={};}collections(e){return e===undefined?this._collections:(this.individualCollections[e]===undefined&&(this.individualCollections[e]=new Y(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===undefined?this._aliases:(this.individualAliases[e]===undefined&&(this.individualAliases[e]=new G(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===undefined?this._keys:(this.individualKeys[e]===undefined&&(this.individualKeys[e]=new X(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===undefined?this._presets:(this.individualPresets[e]===undefined&&(this.individualPresets[e]=new ne(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===undefined?this._stopwords:(this.individualStopwords[e]===undefined&&(this.individualStopwords[e]=new le(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===undefined?this._conversations:(this.individualConversations[e]===undefined&&(this.individualConversations[e]=new pe(e,this.apiCall)),this.individualConversations[e])}};exports.Client=ye;exports.Errors=_e;exports.SearchClient=ge;//# sourceMappingURL=index.min.js.map +//# sourceMappingURL=index.min.js.map \ No newline at end of file diff --git a/dist/index.min.js.map b/dist/index.min.js.map new file mode 100644 index 00000000..65970812 --- /dev/null +++ b/dist/index.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/Configuration.ts","../src/Typesense/ApiCall.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/Collections.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Utils.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/StemmingDictionaries.ts","../src/Typesense/StemmingDictionary.ts","../src/Typesense/Stemming.ts","../src/Typesense/Client.ts"],"names":["require_http","__commonJSMin","exports","module","require_https","require_crypto","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","httpBody","httpStatus","importResults","payload","Configuration","options","node","logger","key","array","i","j","import_http","import_https","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted","numTries","abortListener","requestOptions","status","data","headers","transformedData","HTTPAgent","HTTPSAgent","source","response","error","candidateNode","isDueForHealthcheck","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","errorMessage","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","oldestEntry","RESOURCEPATH","Collections","apiCall","schema","SearchOnlyDocuments","collectionName","searchParameters","cacheSearchResultsForSeconds","additionalQueryParams","normalizedParams","normalizeArrayableParams","queryParams","operation","arrayableParams","Documents","document","query","documents","documentsInJSONLFormat","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","readableStream","hasNoArrayValues","params","isNonArrayValue","result","value","MultiSearch","useTextContentType","searchRequests","commonParams","normalizedSearchRequests","normalizedQueryParams","SearchOnlyCollection","name","SearchClient","_","collection","Overrides","_Overrides","overrideId","Override","Synonyms","_Synonyms","synonymId","Synonym","Document","documentId","partialDocument","Collection","Aliases","_Aliases","mapping","aliasName","Alias","import_crypto","Keys","_Keys","searchKey","parameters","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","Debug","Metrics","Health","Operations","operationName","Presets","_Presets","presetId","search","Preset","AnalyticsRules","_AnalyticsRules","AnalyticsRule","AnalyticsEvents","_AnalyticsEvents","Analytics","Stopwords","_Stopwords","stopwordId","Stopword","ConversationModels","_ConversationModels","ConversationModel","Conversations","Conversation","StemmingDictionaries","_StemmingDictionaries","wordRootCombinations","wordRootCombinationsInJSONLFormat","combo","line","StemmingDictionary","Stemming","Client"],"mappings":"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","file":"index.min.js","sourcesContent":["module.exports = {}","module.exports = {}","module.exports = {}","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport type DeleteQuery =\n | {\n truncate?: true;\n }\n | {\n truncate?: never;\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n };\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n max_filter_by_candidates?: number; // default: 4\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n rerank_hybrid_matches?: boolean;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n union?: true;\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopolygon\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema\n extends Pick<\n CollectionCreateSchema,\n \"token_separators\" | \"symbols_to_index\"\n > {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName:\n | \"vote\"\n | \"snapshot\"\n | \"cache/clear\"\n | \"schema_changes\"\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters,\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport type { StemmingDictionaryCreateSchema } from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming/dictionaries\";\n\nexport interface StemmingDictionariesRetrieveSchema {\n dictionaries: string[];\n}\n\nexport default class StemmingDictionaries {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n id: string,\n wordRootCombinations: StemmingDictionaryCreateSchema[] | string,\n ): Promise {\n const wordRootCombinationsInJSONLFormat = Array.isArray(\n wordRootCombinations,\n )\n ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join(\"\\n\")\n : wordRootCombinations;\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: {id},\n bodyParameters: wordRootCombinationsInJSONLFormat,\n additionalHeaders: {\"Content-Type\": \"text/plain\"},\n skipConnectionTimeout: true,\n }\n );\n\n return Array.isArray(wordRootCombinations)\n ? resultsInJSONLFormat\n .split(\"\\n\")\n .map((line) => JSON.parse(line) as StemmingDictionaryCreateSchema)\n : resultsInJSONLFormat;\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return operation === undefined\n ? `${StemmingDictionaries.RESOURCEPATH}`\n : `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\n\nexport interface StemmingDictionaryCreateSchema {\n root: string;\n word: string;\n}\n\nexport interface StemmingDictionarySchema {\n id: string;\n words: StemmingDictionaryCreateSchema[];\n}\n\nexport default class StemmingDictionary {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import type ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\nimport StemmingDictionary from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming\";\n\nexport default class Stemming {\n private readonly _stemmingDictionaries: StemmingDictionaries;\n private readonly individualStemmingDictionaries: Record<\n string,\n StemmingDictionary\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._stemmingDictionaries = new StemmingDictionaries(this.apiCall);\n }\n\n dictionaries(): StemmingDictionaries;\n dictionaries(id: string): StemmingDictionary;\n dictionaries(id?: string): StemmingDictionaries | StemmingDictionary {\n if (id === undefined) {\n return this._stemmingDictionaries;\n } else {\n if (this.individualStemmingDictionaries[id] === undefined) {\n this.individualStemmingDictionaries[id] = new StemmingDictionary(\n id,\n this.apiCall,\n );\n }\n return this.individualStemmingDictionaries[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\nimport Stemming from \"./Stemming\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n stemming: Stemming;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this.stemming = new Stemming(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"]} \ No newline at end of file diff --git a/dist/index.min.mjs b/dist/index.min.mjs new file mode 100644 index 00000000..dae20f82 --- /dev/null +++ b/dist/index.min.mjs @@ -0,0 +1,11 @@ +import Ve from'loglevel';import he from'axios';var Fe=Object.create;var Ce=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,Je=Object.prototype.hasOwnProperty;var Se=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Qe=(r,e)=>{for(var t in e)Ce(r,t,{get:e[t],enumerable:true});},Be=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ze(e))!Je.call(r,n)&&n!==t&&Ce(r,n,{get:()=>e[n],enumerable:!(i=je(e,n))||i.enumerable});return r};var ve=(r,e,t)=>(t=r!=null?Fe(Le(r)):{},Be(!r||!r.__esModule?Ce(t,"default",{value:r,enumerable:true}):t,r));var Te=Se((Bt,be)=>{be.exports={};});var we=Se((Vt,Ee)=>{Ee.exports={};});var ke=Se((ti,Ie)=>{Ie.exports={};});var _e={};Qe(_e,{HTTPError:()=>R,ImportError:()=>y,MissingConfigurationError:()=>g,ObjectAlreadyExists:()=>x,ObjectNotFound:()=>f,ObjectUnprocessable:()=>A,RequestMalformed:()=>_,RequestUnauthorized:()=>b,ServerError:()=>T,TypesenseError:()=>l});var l=class extends Error{constructor(e,t,i){super(e),this.name=new.target.name,this.httpBody=t,this.httpStatus=i,Object.setPrototypeOf(this,new.target.prototype);}};var R=class extends l{};var g=class extends l{};var x=class extends l{};var f=class extends l{};var A=class extends l{};var _=class extends l{};var b=class extends l{};var T=class extends l{};var y=class extends l{constructor(e,t,i){super(e),this.importResults=t,this.payload=i;}};var E=class{constructor(e){this.nodes=e.nodes||[],this.nodes=this.nodes.map(t=>this.setDefaultPathInNode(t)).map(t=>this.setDefaultPortInNode(t)).map(t=>({...t})),e.randomizeNodes==null&&(e.randomizeNodes=true),e.randomizeNodes===true&&this.shuffleArray(this.nodes),this.nearestNode=e.nearestNode,this.nearestNode=this.setDefaultPathInNode(this.nearestNode),this.nearestNode=this.setDefaultPortInNode(this.nearestNode),this.connectionTimeoutSeconds=e.connectionTimeoutSeconds||e.timeoutSeconds||5,this.healthcheckIntervalSeconds=e.healthcheckIntervalSeconds||60,this.numRetries=(e.numRetries!==undefined&&e.numRetries>=0?e.numRetries:this.nodes.length+(this.nearestNode==null?0:1))||3,this.retryIntervalSeconds=e.retryIntervalSeconds||.1,this.apiKey=e.apiKey,this.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam,this.cacheSearchResultsForSeconds=e.cacheSearchResultsForSeconds||0,this.useServerSideSearchCache=e.useServerSideSearchCache||false,this.axiosAdapter=e.axiosAdapter,this.logger=e.logger||Ve,this.logLevel=e.logLevel||"warn",this.logger.setLevel(this.logLevel),this.additionalHeaders=e.additionalHeaders,this.httpAgent=e.httpAgent,this.httpsAgent=e.httpsAgent,this.paramsSerializer=e.paramsSerializer,this.showDeprecationWarnings(e),this.validate();}validate(){if(this.nodes==null||this.nodes.length===0||this.validateNodes())throw new g("Ensure that nodes[].protocol, nodes[].host and nodes[].port are set");if(this.nearestNode!=null&&this.isNodeMissingAnyParameters(this.nearestNode))throw new g("Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set");if(this.apiKey==null)throw new g("Ensure that apiKey is set");return true}validateNodes(){return this.nodes.some(e=>this.isNodeMissingAnyParameters(e))}isNodeMissingAnyParameters(e){return !["protocol","host","port","path"].every(t=>e.hasOwnProperty(t))&&e.url==null}setDefaultPathInNode(e){return e!=null&&!e.hasOwnProperty("path")&&(e.path=""),e}setDefaultPortInNode(e){if(e!=null&&!e.hasOwnProperty("port")&&e.hasOwnProperty("protocol"))switch(e.protocol){case "https":e.port=443;break;case "http":e.port=80;break}return e}showDeprecationWarnings(e){e.timeoutSeconds&&this.logger.warn("Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds"),e.masterNode&&this.logger.warn("Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12"),e.readReplicaNodes&&this.logger.warn("Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12");}shuffleArray(e){for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]];}}};var De=ve(Te()),Ne=ve(we());var Ye="X-TYPESENSE-API-KEY",Pe=true,Ge=false,Oe=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,w=class{constructor(e){this.configuration=e;this.apiKey=this.configuration.apiKey,this.nodes=this.configuration.nodes==null?this.configuration.nodes:JSON.parse(JSON.stringify(this.configuration.nodes)),this.nearestNode=this.configuration.nearestNode==null?this.configuration.nearestNode:JSON.parse(JSON.stringify(this.configuration.nearestNode)),this.connectionTimeoutSeconds=this.configuration.connectionTimeoutSeconds,this.healthcheckIntervalSeconds=this.configuration.healthcheckIntervalSeconds,this.numRetriesPerRequest=this.configuration.numRetries,this.retryIntervalSeconds=this.configuration.retryIntervalSeconds,this.sendApiKeyAsQueryParam=this.configuration.sendApiKeyAsQueryParam,this.additionalUserHeaders=this.configuration.additionalHeaders,this.logger=this.configuration.logger,this.initializeMetadataForNodes(),this.currentNodeIndex=-1;}async get(e,t={},{abortSignal:i=null,responseType:n=undefined}={}){return this.performRequest("get",e,{queryParameters:t,abortSignal:i,responseType:n})}async delete(e,t={}){return this.performRequest("delete",e,{queryParameters:t})}async post(e,t={},i={},n={}){return this.performRequest("post",e,{queryParameters:i,bodyParameters:t,additionalHeaders:n})}async put(e,t={},i={}){return this.performRequest("put",e,{queryParameters:i,bodyParameters:t})}async patch(e,t={},i={}){return this.performRequest("patch",e,{queryParameters:i,bodyParameters:t})}getAdapter(){return this.configuration.axiosAdapter?typeof this.configuration.axiosAdapter=="function"?this.configuration.axiosAdapter:typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"?he.getAdapter(this.configuration.axiosAdapter).bind(globalThis):he.getAdapter(this.configuration.axiosAdapter):undefined}async performRequest(e,t,{queryParameters:i=null,bodyParameters:n=null,additionalHeaders:s={},abortSignal:a=null,responseType:h=undefined,skipConnectionTimeout:m=false,enableKeepAlive:C=undefined}){this.configuration.validate();let c=Date.now(),S,j=false;this.logger.debug(`Request #${c}: Performing ${e.toUpperCase()} request: ${t}`);for(let v=1;v<=this.numRetriesPerRequest+1;v++){let P=this.getNextNode(c);if(this.logger.debug(`Request #${c}: Attempting ${e.toUpperCase()} request Try #${v} to Node ${P.index}`),a&&a.aborted)return Promise.reject(new Error("Request aborted by caller."));let Q;try{let o={adapter:this.getAdapter(),method:e,url:this.uriFor(t,P),headers:Object.assign({},this.defaultHeaders(),s,this.additionalUserHeaders),maxContentLength:1/0,maxBodyLength:1/0,responseType:h,validateStatus:z=>z>0,transformResponse:[(z,L)=>{let Ae=z;return L!==void 0&&typeof z=="string"&&L["content-type"]&&L["content-type"].startsWith("application/json")&&(Ae=JSON.parse(z)),Ae}]};if(m!==!0&&(o.timeout=this.connectionTimeoutSeconds*1e3),i&&Object.keys(i).length!==0&&(o.params=i),this.sendApiKeyAsQueryParam&&(o.params=o.params||{},o.params["x-typesense-api-key"]=this.apiKey),this.configuration.httpAgent?(this.logger.debug(`Request #${c}: Using custom httpAgent`),o.httpAgent=this.configuration.httpAgent):C===!0&&(Oe?(this.logger.debug(`Request #${c}: Enabling KeepAlive`),o.httpAgent=new De.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.httpsAgent?(this.logger.debug(`Request #${c}: Using custom httpsAgent`),o.httpsAgent=this.configuration.httpsAgent):C===!0&&(Oe?(this.logger.debug(`Request #${c}: Enabling keepAlive`),o.httpsAgent=new Ne.Agent({keepAlive:!0})):this.logger.warn(`Request #${c}: Cannot use custom httpAgent in a browser environment to enable keepAlive`)),this.configuration.paramsSerializer&&(this.logger.debug(`Request #${c}: Using custom paramsSerializer`),o.paramsSerializer=this.configuration.paramsSerializer),n&&(typeof n=="string"&&n.length!==0||typeof n=="object"&&Object.keys(n).length!==0)&&(o.data=n),a){let L=he.CancelToken.source();Q=()=>{j=!0,L.cancel();},a.addEventListener("abort",Q),o.cancelToken=L.token;}let d=await he(o);if(d.status>=1&&d.status<=499&&this.setNodeHealthcheck(P,Pe),this.logger.debug(`Request #${c}: Request to Node ${P.index} was made. Response Code was ${d.status}.`),d.status>=200&&d.status<300)return Promise.resolve(d.data);if(d.status<500)return Promise.reject(this.customErrorForResponse(d,d.data?.message,o.data));throw this.customErrorForResponse(d,d.data?.message,o.data)}catch(o){if(j||this.setNodeHealthcheck(P,Ge),S=o,this.logger.warn(`Request #${c}: Request to Node ${P.index} failed due to "${o?.code??""} ${o.message}${o.response==null?"":" - "+JSON.stringify(o.response?.data)}"`),j)return Promise.reject(new Error("Request aborted by caller."));v`Node ${i.index} is ${i.isHealthy===true?"Healthy":"Unhealthy"}`).join(" || ")}`);let t=this.nodes[0];for(let i=0;i<=this.nodes.length;i++)if(this.currentNodeIndex=(this.currentNodeIndex+1)%this.nodes.length,t=this.nodes[this.currentNodeIndex],t.isHealthy===true||this.nodeDueForHealthcheck(t,e))return this.logger.debug(`Request #${e}: Updated current node to Node ${t.index}`),t;return this.logger.debug(`Request #${e}: No healthy nodes were found. Returning the next node, Node ${t.index}`),t}nodeDueForHealthcheck(e,t=0){let i=Date.now()-e.lastAccessTimestamp>this.healthcheckIntervalSeconds*1e3;return i&&this.logger.debug(`Request #${t}: Node ${e.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`),i}initializeMetadataForNodes(){this.nearestNode!=null&&(this.nearestNode.index="nearestNode",this.setNodeHealthcheck(this.nearestNode,Pe)),this.nodes.forEach((e,t)=>{e.index=t,this.setNodeHealthcheck(e,Pe);});}setNodeHealthcheck(e,t){e.isHealthy=t,e.lastAccessTimestamp=Date.now();}uriFor(e,t){return t.url!=null?`${t.url}${e}`:`${t.protocol}://${t.host}:${t.port}${t.path}${e}`}defaultHeaders(){let e={};return this.sendApiKeyAsQueryParam||(e[Ye]=this.apiKey),e["Content-Type"]="application/json",e}async timer(e){return new Promise(t=>setTimeout(t,e*1e3))}customErrorForResponse(e,t,i){let n=`Request failed with HTTP code ${e.status}`;typeof t=="string"&&t.trim()!==""&&(n+=` | Server said: ${t}`);let s=new l(n,i,e.status);return e.status===400?s=new _(n):e.status===401?s=new b(n):e.status===404?s=new f(n):e.status===409?s=new x(n):e.status===422?s=new A(n):e.status>=500&&e.status<=599?s=new T(n):s=new R(n),s}};var O=class{constructor(){this.responseCache=new Map;this.responsePromiseCache=new Map;}clearCache(){this.responseCache=new Map,this.responsePromiseCache=new Map;}async perform(e,t,i,n){let{cacheResponseForSeconds:s=120,maxSize:a=100}=n;if(s<=0||a<=0)return t.call(e,...i);let m=JSON.stringify(i),C=this.responseCache.get(m),c=Date.now();if(C){if(c-C.requestTimestampa){let o=this.responseCache.keys().next().value;o&&this.responseCache.delete(o);}if(this.responsePromiseCache.size>a){let o=this.responsePromiseCache.keys().next().value;o&&this.responsePromiseCache.delete(o);}return v}};var Re="/collections",p=class{constructor(e){this.apiCall=e;}async create(e,t={}){return this.apiCall.post(Re,e,t)}async retrieve(e={}){return this.apiCall.get(Re,e)}static get RESOURCEPATH(){return Re}};var Ue="/documents",J=class{constructor(e,t,i){this.collectionName=e;this.apiCall=t;this.configuration=i;this.requestWithCache=new O;}clearCache(){this.requestWithCache.clearCache();}async search(e,{cacheSearchResultsForSeconds:t=this.configuration.cacheSearchResultsForSeconds,abortSignal:i=null}={}){let n={};this.configuration.useServerSideSearchCache===true&&(n.use_cache=true);let s=u(e),a=Object.assign({},n,s);return this.requestWithCache.perform(this.apiCall,this.apiCall.get,[this.endpointPath("search"),a,{abortSignal:i}],{cacheResponseForSeconds:t})}endpointPath(e){return `${p.RESOURCEPATH}/${this.collectionName}${Ue}${e===undefined?"":"/"+e}`}static get RESOURCEPATH(){return Ue}};var xe={query_by:"query_by",query_by_weights:"query_by_weights",facet_by:"facet_by",group_by:"group_by",include_fields:"include_fields",exclude_fields:"exclude_fields",highlight_fields:"highlight_fields",highlight_full_fields:"highlight_full_fields",pinned_hits:"pinned_hits",hidden_hits:"hidden_hits",infix:"infix",override_tags:"override_tags",num_typos:"num_typos",prefix:"prefix",sort_by:"sort_by"},He=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,D=class extends J{constructor(e,t,i){super(e,t,i);}async create(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,t)}async upsert(e,t={}){if(!e)throw new Error("No document provided");return this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"upsert"}))}async update(e,t={}){if(!e)throw new Error("No document provided");return t.filter_by!=null?this.apiCall.patch(this.endpointPath(),e,Object.assign({},t)):this.apiCall.post(this.endpointPath(),e,Object.assign({},t,{action:"update"}))}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async createMany(e,t={}){return this.configuration.logger.warn("createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents"),this.import(e,t)}async import(e,t={}){let i;if(Array.isArray(e))try{i=e.map(s=>JSON.stringify(s)).join(` +`);}catch(s){throw s instanceof RangeError&&s.message.includes("Too many properties to enumerate")?new Error(`${s} + It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object + + Please try reducing the number of keys in your document, or using CURL to import your data. + `):new Error(s)}else i=e;let n=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:true,enableKeepAlive:!!He});if(Array.isArray(e)){let s=n.split(` +`).map(h=>JSON.parse(h)),a=s.filter(h=>h.success===false);if(a.length>0)throw new y(`${s.length-a.length} documents imported successfully, ${a.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,s,{documentsInJSONLFormat:i,options:t,failedItems:a,successCount:s.length-a.length});return s}else return n}async importStream(e,t={}){let n=(await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:t,bodyParameters:e,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:true,enableKeepAlive:!!He})).split(` +`).map(a=>JSON.parse(a)),s=n.filter(a=>a.success===false);if(s.length>0)throw new y(`${n.length-s.length} documents imported successfully, ${s.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`,n,{documentsInJSONLFormat:e,options:t,failedItems:s,successCount:n.length-s.length});return n}async export(e={}){return this.apiCall.get(this.endpointPath("export"),e)}async exportStream(e={}){return this.apiCall.get(this.endpointPath("export"),e,{responseType:"stream"})}};function $e(r){return Object.keys(xe).filter(e=>r[e]!==undefined).every(e=>Xe(r[e]))}function u(r){let e={...r};if(!Object.keys(xe).filter(i=>Array.isArray(e[i])).map(i=>(e[i]=e[i].join(","),i)).length&&$e(e))return e;if(!$e(e))throw new Error(`Failed to normalize arrayable params: ${JSON.stringify(e)}`);return e}function Xe(r){return !Array.isArray(r)}var Ze="/multi_search",N=class{constructor(e,t,i=false){this.apiCall=e;this.configuration=t;this.useTextContentType=i;this.requestWithCache=new O;}clearCache(){this.requestWithCache.clearCache();}async perform(e,t={},{cacheSearchResultsForSeconds:i=this.configuration.cacheSearchResultsForSeconds}={}){let n={};this.useTextContentType&&(n["content-type"]="text/plain");let s={};this.configuration.useServerSideSearchCache===true&&(s.use_cache=true);let a={...t,...s},h={searches:e.searches.map(u)},m=u(a);return this.requestWithCache.perform(this.apiCall,this.apiCall.post,[Ze,h,m,n],{cacheResponseForSeconds:i})}};var ue=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this._documents=new J(this.name,this.apiCall,this.configuration);}documents(){return this._documents}};var ge=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??true,e.sendApiKeyAsQueryParam===true&&(e.apiKey||"").length>2e3&&(console.warn("[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter."),e.sendApiKeyAsQueryParam=false),this.configuration=new E(e),this.apiCall=new w(this.configuration),this.multiSearch=new N(this.apiCall,this.configuration,true),this.individualCollections={};}clearCache(){this.multiSearch.clearCache(),Object.entries(this.individualCollections).forEach(([e,t])=>{t.documents().clearCache();});}collections(e){if(e)return this.individualCollections[e]===undefined&&(this.individualCollections[e]=new ue(e,this.apiCall,this.configuration)),this.individualCollections[e];throw new Error("Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object.")}};var et="/overrides",U=class r{constructor(e,t){this.collectionName=e;this.apiCall=t;}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return `${p.RESOURCEPATH}/${this.collectionName}${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return et}};var B=class{constructor(e,t,i){this.collectionName=e;this.overrideId=t;this.apiCall=i;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${U.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`}};var tt="/synonyms",H=class r{constructor(e,t){this.collectionName=e;this.apiCall=t;}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return `${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return tt}};var V=class{constructor(e,t,i){this.collectionName=e;this.synonymId=t;this.apiCall=i;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${H.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`}};var fe=class{constructor(e,t,i){this.collectionName=e;this.documentId=t;this.apiCall=i;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(e){return this.apiCall.delete(this.endpointPath(),e)}async update(e,t={}){return this.apiCall.patch(this.endpointPath(),e,t)}endpointPath(){return `${p.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${D.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`}};var Y=class{constructor(e,t,i){this.name=e;this.apiCall=t;this.configuration=i;this.individualDocuments={};this.individualOverrides={};this.individualSynonyms={};this.name=e,this.apiCall=t,this.configuration=i,this._documents=new D(this.name,this.apiCall,this.configuration),this._overrides=new U(this.name,this.apiCall),this._synonyms=new H(this.name,this.apiCall);}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.patch(this.endpointPath(),e)}async delete(e={}){return this.apiCall.delete(this.endpointPath(),e)}async exists(){try{return await this.retrieve(),!0}catch(e){if(e instanceof f)return false;throw e}}documents(e){return e?(this.individualDocuments[e]===undefined&&(this.individualDocuments[e]=new fe(this.name,e,this.apiCall)),this.individualDocuments[e]):this._documents}overrides(e){return e===undefined?this._overrides:(this.individualOverrides[e]===undefined&&(this.individualOverrides[e]=new B(this.name,e,this.apiCall)),this.individualOverrides[e])}synonyms(e){return e===undefined?this._synonyms:(this.individualSynonyms[e]===undefined&&(this.individualSynonyms[e]=new V(this.name,e,this.apiCall)),this.individualSynonyms[e])}endpointPath(){return `${p.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var qe="/aliases",$=class r{constructor(e){this.apiCall=e;}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(qe)}endpointPath(e){return `${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return qe}};var G=class{constructor(e,t){this.name=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${$.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var Me=ve(ke());var Ke="/keys",q=class r{constructor(e){this.apiCall=e;this.apiCall=e;}async create(e){return this.apiCall.post(r.RESOURCEPATH,e)}async retrieve(){return this.apiCall.get(Ke)}generateScopedSearchKey(e,t){let i=u(t),n=JSON.stringify(i),s=Buffer.from((0, Me.createHmac)("sha256",e).update(n).digest("base64")),a=e.substr(0,4),h=`${s}${a}${n}`;return Buffer.from(h).toString("base64")}static get RESOURCEPATH(){return Ke}};var X=class{constructor(e,t){this.id=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${q.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var rt="/debug",Z=class{constructor(e){this.apiCall=e;}async retrieve(){return this.apiCall.get(rt)}};var it="/metrics.json",ee=class{constructor(e){this.apiCall=e;}async retrieve(){return this.apiCall.get(it)}};var nt="/stats.json",te=class{constructor(e){this.apiCall=e;}async retrieve(){return this.apiCall.get(nt)}};var st="/health",re=class{constructor(e){this.apiCall=e;}async retrieve(){return this.apiCall.get(st)}};var ot="/operations",ie=class{constructor(e){this.apiCall=e;}async perform(e,t={}){return this.apiCall.post(`${ot}/${e}`,{},t)}};var at="/presets",I=class r{constructor(e){this.apiCall=e;}async upsert(e,t){if(typeof t.value=="object"&&"searches"in t.value){let n=t.value.searches.map(s=>u(s));return this.apiCall.put(this.endpointPath(e),{value:{searches:n}})}let i=u(t.value);return this.apiCall.put(this.endpointPath(e),{value:i})}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return `${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return at}};var ne=class{constructor(e,t){this.presetId=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${I.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`}};var lt="/analytics/rules",k=class r{constructor(e){this.apiCall=e;this.apiCall=e;}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return `${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return lt}};var se=class{constructor(e,t){this.name=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${k.RESOURCEPATH}/${encodeURIComponent(this.name)}`}};var ct="/analytics/events",oe=class r{constructor(e){this.apiCall=e;this.apiCall=e;}async create(e){return this.apiCall.post(this.endpointPath(),e)}endpointPath(e){return `${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return ct}};var pt="/analytics",ae=class{constructor(e){this.apiCall=e;this.individualAnalyticsRules={};this.apiCall=e,this._analyticsRules=new k(this.apiCall),this._analyticsEvents=new oe(this.apiCall);}rules(e){return e===undefined?this._analyticsRules:(this.individualAnalyticsRules[e]===undefined&&(this.individualAnalyticsRules[e]=new se(e,this.apiCall)),this.individualAnalyticsRules[e])}events(){return this._analyticsEvents}static get RESOURCEPATH(){return pt}};var mt="/stopwords",K=class r{constructor(e){this.apiCall=e;}async upsert(e,t){return this.apiCall.put(this.endpointPath(e),t)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return `${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return mt}};var le=class{constructor(e,t){this.stopwordId=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${K.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`}};var dt="/conversations/models",M=class r{constructor(e){this.apiCall=e;this.apiCall=e;}async create(e){return this.apiCall.post(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return `${r.RESOURCEPATH}${e===undefined?"":"/"+encodeURIComponent(e)}`}static get RESOURCEPATH(){return dt}};var ce=class{constructor(e,t){this.id=e;this.apiCall=t;}async update(e){return this.apiCall.put(this.endpointPath(),e)}async retrieve(){return this.apiCall.get(this.endpointPath())}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${M.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var We="/conversations",W=class{constructor(e){this.apiCall=e;this.individualConversationModels={};this.apiCall=e,this._conversationsModels=new M(this.apiCall);}async retrieve(){return this.apiCall.get(We)}models(e){return e===undefined?this._conversationsModels:(this.individualConversationModels[e]===undefined&&(this.individualConversationModels[e]=new ce(e,this.apiCall)),this.individualConversationModels[e])}static get RESOURCEPATH(){return We}};var pe=class{constructor(e,t){this.id=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}async update(e){return this.apiCall.put(this.endpointPath(),e)}async delete(){return this.apiCall.delete(this.endpointPath())}endpointPath(){return `${W.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ht="/stemming/dictionaries",F=class r{constructor(e){this.apiCall=e;this.apiCall=e;}async upsert(e,t){let i=Array.isArray(t)?t.map(s=>JSON.stringify(s)).join(` +`):t,n=await this.apiCall.performRequest("post",this.endpointPath("import"),{queryParameters:{id:e},bodyParameters:i,additionalHeaders:{"Content-Type":"text/plain"},skipConnectionTimeout:true});return Array.isArray(t)?n.split(` +`).map(s=>JSON.parse(s)):n}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(e){return e===undefined?`${r.RESOURCEPATH}`:`${r.RESOURCEPATH}/${encodeURIComponent(e)}`}static get RESOURCEPATH(){return ht}};var me=class{constructor(e,t){this.id=e;this.apiCall=t;}async retrieve(){return this.apiCall.get(this.endpointPath())}endpointPath(){return `${F.RESOURCEPATH}/${encodeURIComponent(this.id)}`}};var ut="/stemming",de=class{constructor(e){this.apiCall=e;this.individualStemmingDictionaries={};this.apiCall=e,this._stemmingDictionaries=new F(this.apiCall);}dictionaries(e){return e===undefined?this._stemmingDictionaries:(this.individualStemmingDictionaries[e]===undefined&&(this.individualStemmingDictionaries[e]=new me(e,this.apiCall)),this.individualStemmingDictionaries[e])}static get RESOURCEPATH(){return ut}};var ye=class{constructor(e){e.sendApiKeyAsQueryParam=e.sendApiKeyAsQueryParam??false,this.configuration=new E(e),this.apiCall=new w(this.configuration),this.debug=new Z(this.apiCall),this.metrics=new ee(this.apiCall),this.stats=new te(this.apiCall),this.health=new re(this.apiCall),this.operations=new ie(this.apiCall),this.multiSearch=new N(this.apiCall,this.configuration),this._collections=new p(this.apiCall),this.individualCollections={},this._aliases=new $(this.apiCall),this.individualAliases={},this._keys=new q(this.apiCall),this.individualKeys={},this._presets=new I(this.apiCall),this.individualPresets={},this._stopwords=new K(this.apiCall),this.individualStopwords={},this.analytics=new ae(this.apiCall),this.stemming=new de(this.apiCall),this._conversations=new W(this.apiCall),this.individualConversations={};}collections(e){return e===undefined?this._collections:(this.individualCollections[e]===undefined&&(this.individualCollections[e]=new Y(e,this.apiCall,this.configuration)),this.individualCollections[e])}aliases(e){return e===undefined?this._aliases:(this.individualAliases[e]===undefined&&(this.individualAliases[e]=new G(e,this.apiCall)),this.individualAliases[e])}keys(e){return e===undefined?this._keys:(this.individualKeys[e]===undefined&&(this.individualKeys[e]=new X(e,this.apiCall)),this.individualKeys[e])}presets(e){return e===undefined?this._presets:(this.individualPresets[e]===undefined&&(this.individualPresets[e]=new ne(e,this.apiCall)),this.individualPresets[e])}stopwords(e){return e===undefined?this._stopwords:(this.individualStopwords[e]===undefined&&(this.individualStopwords[e]=new le(e,this.apiCall)),this.individualStopwords[e])}conversations(e){return e===undefined?this._conversations:(this.individualConversations[e]===undefined&&(this.individualConversations[e]=new pe(e,this.apiCall)),this.individualConversations[e])}};export{ye as Client,_e as Errors,ge as SearchClient};//# sourceMappingURL=index.min.mjs.map +//# sourceMappingURL=index.min.mjs.map \ No newline at end of file diff --git a/dist/index.min.mjs.map b/dist/index.min.mjs.map new file mode 100644 index 00000000..5c600d88 --- /dev/null +++ b/dist/index.min.mjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/Configuration.ts","../src/Typesense/ApiCall.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/Collections.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Utils.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/StemmingDictionaries.ts","../src/Typesense/StemmingDictionary.ts","../src/Typesense/Stemming.ts","../src/Typesense/Client.ts"],"names":["require_http","__commonJSMin","exports","module","require_https","require_crypto","Errors_exports","__export","HTTPError","ImportError","MissingConfigurationError","ObjectAlreadyExists","ObjectNotFound","ObjectUnprocessable","RequestMalformed","RequestUnauthorized","ServerError","TypesenseError","message","httpBody","httpStatus","importResults","payload","Configuration","options","node","logger","key","array","i","j","import_http","import_https","APIKEYHEADERNAME","HEALTHY","UNHEALTHY","isNodeJSEnvironment","ApiCall","configuration","endpoint","queryParameters","abortSignal","responseType","bodyParameters","additionalHeaders","axios","requestType","skipConnectionTimeout","enableKeepAlive","requestNumber","lastException","wasAborted","numTries","abortListener","requestOptions","status","data","headers","transformedData","HTTPAgent","HTTPSAgent","source","response","error","candidateNode","isDueForHealthcheck","isHealthy","defaultHeaders","seconds","resolve","messageFromServer","errorMessage","RequestWithCache","requestContext","requestFunction","requestFunctionArguments","cacheOptions","cacheResponseForSeconds","maxSize","requestFunctionArgumentsJSON","cacheEntry","now","cachePromiseEntry","responsePromise","oldestEntry","RESOURCEPATH","Collections","apiCall","schema","SearchOnlyDocuments","collectionName","searchParameters","cacheSearchResultsForSeconds","additionalQueryParams","normalizedParams","normalizeArrayableParams","queryParams","operation","arrayableParams","Documents","document","query","documents","documentsInJSONLFormat","resultsInJSONLFormat","resultsInJSONFormat","r","failedItems","readableStream","hasNoArrayValues","params","isNonArrayValue","result","value","MultiSearch","useTextContentType","searchRequests","commonParams","normalizedSearchRequests","normalizedQueryParams","SearchOnlyCollection","name","SearchClient","_","collection","Overrides","_Overrides","overrideId","Override","Synonyms","_Synonyms","synonymId","Synonym","Document","documentId","partialDocument","Collection","Aliases","_Aliases","mapping","aliasName","Alias","import_crypto","Keys","_Keys","searchKey","parameters","paramsJSON","digest","keyPrefix","rawScopedKey","Key","id","Debug","Metrics","Health","Operations","operationName","Presets","_Presets","presetId","search","Preset","AnalyticsRules","_AnalyticsRules","AnalyticsRule","AnalyticsEvents","_AnalyticsEvents","Analytics","Stopwords","_Stopwords","stopwordId","Stopword","ConversationModels","_ConversationModels","ConversationModel","Conversations","Conversation","StemmingDictionaries","_StemmingDictionaries","wordRootCombinations","wordRootCombinationsInJSONLFormat","combo","line","StemmingDictionary","Stemming","Client"],"mappings":"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","file":"index.min.mjs","sourcesContent":["module.exports = {}","module.exports = {}","module.exports = {}","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport type DeleteQuery =\n | {\n truncate?: true;\n }\n | {\n truncate?: never;\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n };\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n max_filter_by_candidates?: number; // default: 4\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n rerank_hybrid_matches?: boolean;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n union?: true;\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopolygon\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema\n extends Pick<\n CollectionCreateSchema,\n \"token_separators\" | \"symbols_to_index\"\n > {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName:\n | \"vote\"\n | \"snapshot\"\n | \"cache/clear\"\n | \"schema_changes\"\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters,\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport type { StemmingDictionaryCreateSchema } from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming/dictionaries\";\n\nexport interface StemmingDictionariesRetrieveSchema {\n dictionaries: string[];\n}\n\nexport default class StemmingDictionaries {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n id: string,\n wordRootCombinations: StemmingDictionaryCreateSchema[] | string,\n ): Promise {\n const wordRootCombinationsInJSONLFormat = Array.isArray(\n wordRootCombinations,\n )\n ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join(\"\\n\")\n : wordRootCombinations;\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: {id},\n bodyParameters: wordRootCombinationsInJSONLFormat,\n additionalHeaders: {\"Content-Type\": \"text/plain\"},\n skipConnectionTimeout: true,\n }\n );\n\n return Array.isArray(wordRootCombinations)\n ? resultsInJSONLFormat\n .split(\"\\n\")\n .map((line) => JSON.parse(line) as StemmingDictionaryCreateSchema)\n : resultsInJSONLFormat;\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return operation === undefined\n ? `${StemmingDictionaries.RESOURCEPATH}`\n : `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\n\nexport interface StemmingDictionaryCreateSchema {\n root: string;\n word: string;\n}\n\nexport interface StemmingDictionarySchema {\n id: string;\n words: StemmingDictionaryCreateSchema[];\n}\n\nexport default class StemmingDictionary {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import type ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\nimport StemmingDictionary from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming\";\n\nexport default class Stemming {\n private readonly _stemmingDictionaries: StemmingDictionaries;\n private readonly individualStemmingDictionaries: Record<\n string,\n StemmingDictionary\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._stemmingDictionaries = new StemmingDictionaries(this.apiCall);\n }\n\n dictionaries(): StemmingDictionaries;\n dictionaries(id: string): StemmingDictionary;\n dictionaries(id?: string): StemmingDictionaries | StemmingDictionary {\n if (id === undefined) {\n return this._stemmingDictionaries;\n } else {\n if (this.individualStemmingDictionaries[id] === undefined) {\n this.individualStemmingDictionaries[id] = new StemmingDictionary(\n id,\n this.apiCall,\n );\n }\n return this.individualStemmingDictionaries[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\nimport Stemming from \"./Stemming\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n stemming: Stemming;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this.stemming = new Stemming(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"]} \ No newline at end of file diff --git a/dist/typesense.mjs b/dist/index.mjs similarity index 100% rename from dist/typesense.mjs rename to dist/index.mjs diff --git a/dist/typesense.min.js b/dist/typesense.min.js deleted file mode 100644 index 34579378..00000000 --- a/dist/typesense.min.js +++ /dev/null @@ -1,1783 +0,0 @@ -'use strict'; - -var logger = require('loglevel'); -var axios = require('axios'); - -function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } - -var logger__default = /*#__PURE__*/_interopDefault(logger); -var axios__default = /*#__PURE__*/_interopDefault(axios); - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); - -// node-modules-polyfills-empty:http -var require_http = __commonJS({ - "node-modules-polyfills-empty:http"(exports, module) { - module.exports = {}; - } -}); - -// node-modules-polyfills-empty:https -var require_https = __commonJS({ - "node-modules-polyfills-empty:https"(exports, module) { - module.exports = {}; - } -}); - -// node-modules-polyfills-empty:crypto -var require_crypto = __commonJS({ - "node-modules-polyfills-empty:crypto"(exports, module) { - module.exports = {}; - } -}); - -// src/Typesense/Errors/index.ts -var Errors_exports = {}; -__export(Errors_exports, { - HTTPError: () => HTTPError, - ImportError: () => ImportError, - MissingConfigurationError: () => MissingConfigurationError, - ObjectAlreadyExists: () => ObjectAlreadyExists, - ObjectNotFound: () => ObjectNotFound, - ObjectUnprocessable: () => ObjectUnprocessable, - RequestMalformed: () => RequestMalformed, - RequestUnauthorized: () => RequestUnauthorized, - ServerError: () => ServerError, - TypesenseError: () => TypesenseError -}); - -// src/Typesense/Errors/TypesenseError.ts -var TypesenseError = class extends Error { - // Source: https://stackoverflow.com/a/58417721/123545 - constructor(message, httpBody, httpStatus) { - super(message); - this.name = new.target.name; - this.httpBody = httpBody; - this.httpStatus = httpStatus; - Object.setPrototypeOf(this, new.target.prototype); - } -}; - -// src/Typesense/Errors/HTTPError.ts -var HTTPError = class extends TypesenseError { -}; - -// src/Typesense/Errors/MissingConfigurationError.ts -var MissingConfigurationError = class extends TypesenseError { -}; - -// src/Typesense/Errors/ObjectAlreadyExists.ts -var ObjectAlreadyExists = class extends TypesenseError { -}; - -// src/Typesense/Errors/ObjectNotFound.ts -var ObjectNotFound = class extends TypesenseError { -}; - -// src/Typesense/Errors/ObjectUnprocessable.ts -var ObjectUnprocessable = class extends TypesenseError { -}; - -// src/Typesense/Errors/RequestMalformed.ts -var RequestMalformed = class extends TypesenseError { -}; - -// src/Typesense/Errors/RequestUnauthorized.ts -var RequestUnauthorized = class extends TypesenseError { -}; - -// src/Typesense/Errors/ServerError.ts -var ServerError = class extends TypesenseError { -}; - -// src/Typesense/Errors/ImportError.ts -var ImportError = class extends TypesenseError { - constructor(message, importResults, payload) { - super(message); - this.importResults = importResults; - this.payload = payload; - } -}; - -// src/Typesense/Configuration.ts -var Configuration = class { - constructor(options) { - this.nodes = options.nodes || []; - this.nodes = this.nodes.map((node) => this.setDefaultPathInNode(node)).map((node) => this.setDefaultPortInNode(node)).map((node) => ({ ...node })); - if (options.randomizeNodes == null) { - options.randomizeNodes = true; - } - if (options.randomizeNodes === true) { - this.shuffleArray(this.nodes); - } - this.nearestNode = options.nearestNode; - this.nearestNode = this.setDefaultPathInNode(this.nearestNode); - this.nearestNode = this.setDefaultPortInNode(this.nearestNode); - this.connectionTimeoutSeconds = options.connectionTimeoutSeconds || options.timeoutSeconds || 5; - this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60; - this.numRetries = (options.numRetries !== undefined && options.numRetries >= 0 ? options.numRetries : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; - this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1; - this.apiKey = options.apiKey; - this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; - this.cacheSearchResultsForSeconds = options.cacheSearchResultsForSeconds || 0; - this.useServerSideSearchCache = options.useServerSideSearchCache || false; - this.axiosAdapter = options.axiosAdapter; - this.logger = options.logger || logger__default.default; - this.logLevel = options.logLevel || "warn"; - this.logger.setLevel(this.logLevel); - this.additionalHeaders = options.additionalHeaders; - this.httpAgent = options.httpAgent; - this.httpsAgent = options.httpsAgent; - this.paramsSerializer = options.paramsSerializer; - this.showDeprecationWarnings(options); - this.validate(); - } - validate() { - if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) { - throw new MissingConfigurationError( - "Ensure that nodes[].protocol, nodes[].host and nodes[].port are set" - ); - } - if (this.nearestNode != null && this.isNodeMissingAnyParameters(this.nearestNode)) { - throw new MissingConfigurationError( - "Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set" - ); - } - if (this.apiKey == null) { - throw new MissingConfigurationError("Ensure that apiKey is set"); - } - return true; - } - validateNodes() { - return this.nodes.some((node) => { - return this.isNodeMissingAnyParameters(node); - }); - } - isNodeMissingAnyParameters(node) { - return !["protocol", "host", "port", "path"].every((key) => { - return node.hasOwnProperty(key); - }) && node["url"] == null; - } - setDefaultPathInNode(node) { - if (node != null && !node.hasOwnProperty("path")) { - node["path"] = ""; - } - return node; - } - setDefaultPortInNode(node) { - if (node != null && !node.hasOwnProperty("port") && node.hasOwnProperty("protocol")) { - switch (node["protocol"]) { - case "https": - node["port"] = 443; - break; - case "http": - node["port"] = 80; - break; - } - } - return node; - } - showDeprecationWarnings(options) { - if (options.timeoutSeconds) { - this.logger.warn( - "Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds" - ); - } - if (options.masterNode) { - this.logger.warn( - "Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12" - ); - } - if (options.readReplicaNodes) { - this.logger.warn( - "Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12" - ); - } - } - shuffleArray(array) { - for (let i = array.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [array[i], array[j]] = [array[j], array[i]]; - } - } -}; - -// src/Typesense/ApiCall.ts -var import_http = __toESM(require_http()); -var import_https = __toESM(require_https()); -var APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; -var HEALTHY = true; -var UNHEALTHY = false; -var isNodeJSEnvironment = typeof process !== "undefined" && process.versions != null && process.versions.node != null; -var ApiCall = class { - constructor(configuration) { - this.configuration = configuration; - this.apiKey = this.configuration.apiKey; - this.nodes = this.configuration.nodes == null ? this.configuration.nodes : JSON.parse(JSON.stringify(this.configuration.nodes)); - this.nearestNode = this.configuration.nearestNode == null ? this.configuration.nearestNode : JSON.parse(JSON.stringify(this.configuration.nearestNode)); - this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds; - this.healthcheckIntervalSeconds = this.configuration.healthcheckIntervalSeconds; - this.numRetriesPerRequest = this.configuration.numRetries; - this.retryIntervalSeconds = this.configuration.retryIntervalSeconds; - this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam; - this.additionalUserHeaders = this.configuration.additionalHeaders; - this.logger = this.configuration.logger; - this.initializeMetadataForNodes(); - this.currentNodeIndex = -1; - } - async get(endpoint, queryParameters = {}, { - abortSignal = null, - responseType = undefined - } = {}) { - return this.performRequest("get", endpoint, { - queryParameters, - abortSignal, - responseType - }); - } - async delete(endpoint, queryParameters = {}) { - return this.performRequest("delete", endpoint, { queryParameters }); - } - async post(endpoint, bodyParameters = {}, queryParameters = {}, additionalHeaders = {}) { - return this.performRequest("post", endpoint, { - queryParameters, - bodyParameters, - additionalHeaders - }); - } - async put(endpoint, bodyParameters = {}, queryParameters = {}) { - return this.performRequest("put", endpoint, { - queryParameters, - bodyParameters - }); - } - async patch(endpoint, bodyParameters = {}, queryParameters = {}) { - return this.performRequest("patch", endpoint, { - queryParameters, - bodyParameters - }); - } - getAdapter() { - if (!this.configuration.axiosAdapter) return undefined; - if (typeof this.configuration.axiosAdapter === "function") - return this.configuration.axiosAdapter; - const isCloudflareWorkers = typeof navigator !== "undefined" && navigator.userAgent === "Cloudflare-Workers"; - return isCloudflareWorkers ? axios__default.default.getAdapter(this.configuration.axiosAdapter).bind(globalThis) : axios__default.default.getAdapter(this.configuration.axiosAdapter); - } - async performRequest(requestType, endpoint, { - queryParameters = null, - bodyParameters = null, - additionalHeaders = {}, - abortSignal = null, - responseType = undefined, - skipConnectionTimeout = false, - enableKeepAlive = undefined - }) { - this.configuration.validate(); - const requestNumber = Date.now(); - let lastException; - let wasAborted = false; - this.logger.debug( - `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}` - ); - for (let numTries = 1; numTries <= this.numRetriesPerRequest + 1; numTries++) { - const node = this.getNextNode(requestNumber); - this.logger.debug( - `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${node.index}` - ); - if (abortSignal && abortSignal.aborted) { - return Promise.reject(new Error("Request aborted by caller.")); - } - let abortListener; - try { - const requestOptions = { - adapter: this.getAdapter(), - method: requestType, - url: this.uriFor(endpoint, node), - headers: Object.assign( - {}, - this.defaultHeaders(), - additionalHeaders, - this.additionalUserHeaders - ), - maxContentLength: Infinity, - maxBodyLength: Infinity, - responseType, - validateStatus: (status) => { - return status > 0; - }, - transformResponse: [ - (data, headers) => { - let transformedData = data; - if (headers !== void 0 && typeof data === "string" && headers["content-type"] && headers["content-type"].startsWith("application/json")) { - transformedData = JSON.parse(data); - } - return transformedData; - } - ] - }; - if (skipConnectionTimeout !== true) { - requestOptions.timeout = this.connectionTimeoutSeconds * 1e3; - } - if (queryParameters && Object.keys(queryParameters).length !== 0) { - requestOptions.params = queryParameters; - } - if (this.sendApiKeyAsQueryParam) { - requestOptions.params = requestOptions.params || {}; - requestOptions.params["x-typesense-api-key"] = this.apiKey; - } - if (this.configuration.httpAgent) { - this.logger.debug( - `Request #${requestNumber}: Using custom httpAgent` - ); - requestOptions.httpAgent = this.configuration.httpAgent; - } else if (enableKeepAlive === true) { - if (!isNodeJSEnvironment) { - this.logger.warn( - `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive` - ); - } else { - this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`); - requestOptions.httpAgent = new import_http.Agent({ keepAlive: true }); - } - } - if (this.configuration.httpsAgent) { - this.logger.debug( - `Request #${requestNumber}: Using custom httpsAgent` - ); - requestOptions.httpsAgent = this.configuration.httpsAgent; - } else if (enableKeepAlive === true) { - if (!isNodeJSEnvironment) { - this.logger.warn( - `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive` - ); - } else { - this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`); - requestOptions.httpsAgent = new import_https.Agent({ keepAlive: true }); - } - } - if (this.configuration.paramsSerializer) { - this.logger.debug( - `Request #${requestNumber}: Using custom paramsSerializer` - ); - requestOptions.paramsSerializer = this.configuration.paramsSerializer; - } - if (bodyParameters && (typeof bodyParameters === "string" && bodyParameters.length !== 0 || typeof bodyParameters === "object" && Object.keys(bodyParameters).length !== 0)) { - requestOptions.data = bodyParameters; - } - if (abortSignal) { - const cancelToken = axios__default.default.CancelToken; - const source = cancelToken.source(); - abortListener = () => { - wasAborted = true; - source.cancel(); - }; - abortSignal.addEventListener("abort", abortListener); - requestOptions.cancelToken = source.token; - } - const response = await axios__default.default(requestOptions); - if (response.status >= 1 && response.status <= 499) { - this.setNodeHealthcheck(node, HEALTHY); - } - this.logger.debug( - `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.` - ); - if (response.status >= 200 && response.status < 300) { - return Promise.resolve(response.data); - } else if (response.status < 500) { - return Promise.reject( - this.customErrorForResponse( - response, - response.data?.message, - requestOptions.data - ) - ); - } else { - throw this.customErrorForResponse( - response, - response.data?.message, - requestOptions.data - ); - } - } catch (error) { - if (!wasAborted) { - this.setNodeHealthcheck(node, UNHEALTHY); - } - lastException = error; - this.logger.warn( - `Request #${requestNumber}: Request to Node ${node.index} failed due to "${error?.code ?? ""} ${error.message}${error.response == null ? "" : " - " + JSON.stringify(error.response?.data)}"` - ); - if (wasAborted) { - return Promise.reject(new Error("Request aborted by caller.")); - } - if (numTries < this.numRetriesPerRequest + 1) { - this.logger.warn( - `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...` - ); - } - await this.timer(this.retryIntervalSeconds); - } finally { - if (abortSignal && abortListener) { - abortSignal.removeEventListener("abort", abortListener); - } - } - } - this.logger.debug( - `Request #${requestNumber}: No retries left. Raising last error` - ); - return Promise.reject(lastException); - } - // Attempts to find the next healthy node, looping through the list of nodes once. - // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy - // so we can try the request for good measure, in case that node has become healthy since - getNextNode(requestNumber = 0) { - if (this.nearestNode != null) { - this.logger.debug( - `Request #${requestNumber}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy === true ? "Healthy" : "Unhealthy"}` - ); - if (this.nearestNode.isHealthy === true || this.nodeDueForHealthcheck(this.nearestNode, requestNumber)) { - this.logger.debug( - `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}` - ); - return this.nearestNode; - } - this.logger.debug( - `Request #${requestNumber}: Falling back to individual nodes` - ); - } - this.logger.debug( - `Request #${requestNumber}: Nodes Health: ${this.nodes.map( - (node) => `Node ${node.index} is ${node.isHealthy === true ? "Healthy" : "Unhealthy"}` - ).join(" || ")}` - ); - let candidateNode = this.nodes[0]; - for (let i = 0; i <= this.nodes.length; i++) { - this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length; - candidateNode = this.nodes[this.currentNodeIndex]; - if (candidateNode.isHealthy === true || this.nodeDueForHealthcheck(candidateNode, requestNumber)) { - this.logger.debug( - `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}` - ); - return candidateNode; - } - } - this.logger.debug( - `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}` - ); - return candidateNode; - } - nodeDueForHealthcheck(node, requestNumber = 0) { - const isDueForHealthcheck = Date.now() - node.lastAccessTimestamp > this.healthcheckIntervalSeconds * 1e3; - if (isDueForHealthcheck) { - this.logger.debug( - `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.` - ); - } - return isDueForHealthcheck; - } - initializeMetadataForNodes() { - if (this.nearestNode != null) { - this.nearestNode.index = "nearestNode"; - this.setNodeHealthcheck(this.nearestNode, HEALTHY); - } - this.nodes.forEach((node, i) => { - node.index = i; - this.setNodeHealthcheck(node, HEALTHY); - }); - } - setNodeHealthcheck(node, isHealthy) { - node.isHealthy = isHealthy; - node.lastAccessTimestamp = Date.now(); - } - uriFor(endpoint, node) { - if (node.url != null) { - return `${node.url}${endpoint}`; - } - return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`; - } - defaultHeaders() { - const defaultHeaders = {}; - if (!this.sendApiKeyAsQueryParam) { - defaultHeaders[APIKEYHEADERNAME] = this.apiKey; - } - defaultHeaders["Content-Type"] = "application/json"; - return defaultHeaders; - } - async timer(seconds) { - return new Promise((resolve) => setTimeout(resolve, seconds * 1e3)); - } - customErrorForResponse(response, messageFromServer, httpBody) { - let errorMessage = `Request failed with HTTP code ${response.status}`; - if (typeof messageFromServer === "string" && messageFromServer.trim() !== "") { - errorMessage += ` | Server said: ${messageFromServer}`; - } - let error = new TypesenseError(errorMessage, httpBody, response.status); - if (response.status === 400) { - error = new RequestMalformed(errorMessage); - } else if (response.status === 401) { - error = new RequestUnauthorized(errorMessage); - } else if (response.status === 404) { - error = new ObjectNotFound(errorMessage); - } else if (response.status === 409) { - error = new ObjectAlreadyExists(errorMessage); - } else if (response.status === 422) { - error = new ObjectUnprocessable(errorMessage); - } else if (response.status >= 500 && response.status <= 599) { - error = new ServerError(errorMessage); - } else { - error = new HTTPError(errorMessage); - } - return error; - } -}; - -// src/Typesense/RequestWithCache.ts -var defaultCacheResponseForSeconds = 2 * 60; -var defaultMaxSize = 100; -var RequestWithCache = class { - constructor() { - this.responseCache = /* @__PURE__ */ new Map(); - this.responsePromiseCache = /* @__PURE__ */ new Map(); - } - clearCache() { - this.responseCache = /* @__PURE__ */ new Map(); - this.responsePromiseCache = /* @__PURE__ */ new Map(); - } - // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way - async perform(requestContext, requestFunction, requestFunctionArguments, cacheOptions) { - const { - cacheResponseForSeconds = defaultCacheResponseForSeconds, - maxSize = defaultMaxSize - } = cacheOptions; - const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0; - if (isCacheDisabled) { - return requestFunction.call(requestContext, ...requestFunctionArguments); - } - const requestFunctionArgumentsJSON = JSON.stringify( - requestFunctionArguments - ); - const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON); - const now = Date.now(); - if (cacheEntry) { - const isEntryValid = now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1e3; - if (isEntryValid) { - this.responseCache.delete(requestFunctionArgumentsJSON); - this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry); - return Promise.resolve(cacheEntry.response); - } else { - this.responseCache.delete(requestFunctionArgumentsJSON); - } - } - const cachePromiseEntry = this.responsePromiseCache.get( - requestFunctionArgumentsJSON - ); - if (cachePromiseEntry) { - const isEntryValid = now - cachePromiseEntry.requestTimestamp < cacheResponseForSeconds * 1e3; - if (isEntryValid) { - this.responsePromiseCache.delete(requestFunctionArgumentsJSON); - this.responsePromiseCache.set( - requestFunctionArgumentsJSON, - cachePromiseEntry - ); - return cachePromiseEntry.responsePromise; - } else { - this.responsePromiseCache.delete(requestFunctionArgumentsJSON); - } - } - const responsePromise = requestFunction.call( - requestContext, - ...requestFunctionArguments - ); - this.responsePromiseCache.set(requestFunctionArgumentsJSON, { - requestTimestamp: now, - responsePromise - }); - const response = await responsePromise; - this.responseCache.set(requestFunctionArgumentsJSON, { - requestTimestamp: now, - response - }); - const isCacheOverMaxSize = this.responseCache.size > maxSize; - if (isCacheOverMaxSize) { - const oldestEntry = this.responseCache.keys().next().value; - if (oldestEntry) { - this.responseCache.delete(oldestEntry); - } - } - const isResponsePromiseCacheOverMaxSize = this.responsePromiseCache.size > maxSize; - if (isResponsePromiseCacheOverMaxSize) { - const oldestEntry = this.responsePromiseCache.keys().next().value; - if (oldestEntry) { - this.responsePromiseCache.delete(oldestEntry); - } - } - return response; - } -}; - -// src/Typesense/Collections.ts -var RESOURCEPATH = "/collections"; -var Collections = class { - constructor(apiCall) { - this.apiCall = apiCall; - } - async create(schema, options = {}) { - return this.apiCall.post(RESOURCEPATH, schema, options); - } - async retrieve(options = {}) { - return this.apiCall.get(RESOURCEPATH, options); - } - static get RESOURCEPATH() { - return RESOURCEPATH; - } -}; - -// src/Typesense/SearchOnlyDocuments.ts -var RESOURCEPATH2 = "/documents"; -var SearchOnlyDocuments = class { - constructor(collectionName, apiCall, configuration) { - this.collectionName = collectionName; - this.apiCall = apiCall; - this.configuration = configuration; - this.requestWithCache = new RequestWithCache(); - } - clearCache() { - this.requestWithCache.clearCache(); - } - async search(searchParameters, { - cacheSearchResultsForSeconds = this.configuration.cacheSearchResultsForSeconds, - abortSignal = null - } = {}) { - const additionalQueryParams = {}; - if (this.configuration.useServerSideSearchCache === true) { - additionalQueryParams["use_cache"] = true; - } - const normalizedParams = normalizeArrayableParams(searchParameters); - const queryParams = Object.assign( - {}, - additionalQueryParams, - normalizedParams - ); - return this.requestWithCache.perform( - this.apiCall, - this.apiCall.get, - [this.endpointPath("search"), queryParams, { abortSignal }], - { - cacheResponseForSeconds: cacheSearchResultsForSeconds - } - ); - } - endpointPath(operation) { - return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH2}${operation === undefined ? "" : "/" + operation}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH2; - } -}; - -// src/Typesense/Documents.ts -var arrayableParams = { - query_by: "query_by", - query_by_weights: "query_by_weights", - facet_by: "facet_by", - group_by: "group_by", - include_fields: "include_fields", - exclude_fields: "exclude_fields", - highlight_fields: "highlight_fields", - highlight_full_fields: "highlight_full_fields", - pinned_hits: "pinned_hits", - hidden_hits: "hidden_hits", - infix: "infix", - override_tags: "override_tags", - num_typos: "num_typos", - prefix: "prefix", - sort_by: "sort_by" -}; -var isNodeJSEnvironment2 = typeof process !== "undefined" && process.versions != null && process.versions.node != null; -var Documents = class extends SearchOnlyDocuments { - constructor(collectionName, apiCall, configuration) { - super(collectionName, apiCall, configuration); - } - async create(document, options = {}) { - if (!document) throw new Error("No document provided"); - return this.apiCall.post(this.endpointPath(), document, options); - } - async upsert(document, options = {}) { - if (!document) throw new Error("No document provided"); - return this.apiCall.post( - this.endpointPath(), - document, - Object.assign({}, options, { action: "upsert" }) - ); - } - async update(document, options = {}) { - if (!document) throw new Error("No document provided"); - if (options["filter_by"] != null) { - return this.apiCall.patch( - this.endpointPath(), - document, - Object.assign({}, options) - ); - } else { - return this.apiCall.post( - this.endpointPath(), - document, - Object.assign({}, options, { action: "update" }) - ); - } - } - async delete(query = {}) { - return this.apiCall.delete(this.endpointPath(), query); - } - async createMany(documents, options = {}) { - this.configuration.logger.warn( - "createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents" - ); - return this.import(documents, options); - } - async import(documents, options = {}) { - let documentsInJSONLFormat; - if (Array.isArray(documents)) { - try { - documentsInJSONLFormat = documents.map((document) => JSON.stringify(document)).join("\n"); - } catch (error) { - if (error instanceof RangeError && error.message.includes("Too many properties to enumerate")) { - throw new Error(`${error} - It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object - - Please try reducing the number of keys in your document, or using CURL to import your data. - `); - } - throw new Error(error); - } - } else { - documentsInJSONLFormat = documents; - } - const resultsInJSONLFormat = await this.apiCall.performRequest( - "post", - this.endpointPath("import"), - { - queryParameters: options, - bodyParameters: documentsInJSONLFormat, - additionalHeaders: { "Content-Type": "text/plain" }, - skipConnectionTimeout: true, - // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully - enableKeepAlive: isNodeJSEnvironment2 ? true : false - // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 - } - ); - if (Array.isArray(documents)) { - const resultsInJSONFormat = resultsInJSONLFormat.split("\n").map((r) => JSON.parse(r)); - const failedItems = resultsInJSONFormat.filter( - (r) => r.success === false - ); - if (failedItems.length > 0) { - throw new ImportError( - `${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, - resultsInJSONFormat, - { - documentsInJSONLFormat, - options, - failedItems, - successCount: resultsInJSONFormat.length - failedItems.length - } - ); - } else { - return resultsInJSONFormat; - } - } else { - return resultsInJSONLFormat; - } - } - /** - * Imports documents from a NodeJS readable stream of JSONL. - */ - async importStream(readableStream, options = {}) { - const resultsInJSONLFormat = await this.apiCall.performRequest( - "post", - this.endpointPath("import"), - { - queryParameters: options, - bodyParameters: readableStream, - additionalHeaders: { "Content-Type": "text/plain" }, - skipConnectionTimeout: true, - // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully - enableKeepAlive: isNodeJSEnvironment2 ? true : false - // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 - } - ); - const resultsInJSONFormat = resultsInJSONLFormat.split("\n").map((r) => JSON.parse(r)); - const failedItems = resultsInJSONFormat.filter((r) => r.success === false); - if (failedItems.length > 0) { - throw new ImportError( - `${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, - resultsInJSONFormat, - { - documentsInJSONLFormat: readableStream, - options, - failedItems, - successCount: resultsInJSONFormat.length - failedItems.length - } - ); - } else { - return resultsInJSONFormat; - } - } - /** - * Returns a JSONL string for all the documents in this collection - */ - async export(options = {}) { - return this.apiCall.get(this.endpointPath("export"), options); - } - /** - * Returns a NodeJS readable stream of JSONL for all the documents in this collection. - */ - async exportStream(options = {}) { - return this.apiCall.get(this.endpointPath("export"), options, { - responseType: "stream" - }); - } -}; - -// src/Typesense/Utils.ts -function hasNoArrayValues(params) { - return Object.keys(arrayableParams).filter((key) => params[key] !== undefined).every((key) => isNonArrayValue(params[key])); -} -function normalizeArrayableParams(params) { - const result = { ...params }; - const transformedValues = Object.keys(arrayableParams).filter((key) => Array.isArray(result[key])).map((key) => { - result[key] = result[key].join(","); - return key; - }); - if (!transformedValues.length && hasNoArrayValues(result)) { - return result; - } - if (!hasNoArrayValues(result)) { - throw new Error( - `Failed to normalize arrayable params: ${JSON.stringify(result)}` - ); - } - return result; -} -function isNonArrayValue(value) { - return !Array.isArray(value); -} - -// src/Typesense/MultiSearch.ts -var RESOURCEPATH3 = "/multi_search"; -var MultiSearch = class { - constructor(apiCall, configuration, useTextContentType = false) { - this.apiCall = apiCall; - this.configuration = configuration; - this.useTextContentType = useTextContentType; - this.requestWithCache = new RequestWithCache(); - } - clearCache() { - this.requestWithCache.clearCache(); - } - async perform(searchRequests, commonParams = {}, { - cacheSearchResultsForSeconds = this.configuration.cacheSearchResultsForSeconds - } = {}) { - const additionalHeaders = {}; - if (this.useTextContentType) { - additionalHeaders["content-type"] = "text/plain"; - } - const additionalQueryParams = {}; - if (this.configuration.useServerSideSearchCache === true) { - additionalQueryParams["use_cache"] = true; - } - const queryParams = { ...commonParams, ...additionalQueryParams }; - const normalizedSearchRequests = { - searches: searchRequests.searches.map(normalizeArrayableParams) - }; - const normalizedQueryParams = normalizeArrayableParams(queryParams); - return this.requestWithCache.perform( - this.apiCall, - this.apiCall.post, - [ - RESOURCEPATH3, - normalizedSearchRequests, - normalizedQueryParams, - additionalHeaders - ], - { cacheResponseForSeconds: cacheSearchResultsForSeconds } - ); - } -}; - -// src/Typesense/SearchOnlyCollection.ts -var SearchOnlyCollection = class { - constructor(name, apiCall, configuration) { - this.name = name; - this.apiCall = apiCall; - this.configuration = configuration; - this._documents = new SearchOnlyDocuments( - this.name, - this.apiCall, - this.configuration - ); - } - documents() { - return this._documents; - } -}; - -// src/Typesense/SearchClient.ts -var SearchClient = class { - constructor(options) { - options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true; - if (options.sendApiKeyAsQueryParam === true && (options.apiKey || "").length > 2e3) { - console.warn( - "[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter." - ); - options.sendApiKeyAsQueryParam = false; - } - this.configuration = new Configuration(options); - this.apiCall = new ApiCall(this.configuration); - this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true); - this.individualCollections = {}; - } - clearCache() { - this.multiSearch.clearCache(); - Object.entries(this.individualCollections).forEach(([_, collection]) => { - collection.documents().clearCache(); - }); - } - collections(collectionName) { - if (!collectionName) { - throw new Error( - "Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object." - ); - } else { - if (this.individualCollections[collectionName] === undefined) { - this.individualCollections[collectionName] = new SearchOnlyCollection( - collectionName, - this.apiCall, - this.configuration - ); - } - return this.individualCollections[collectionName]; - } - } -}; - -// src/Typesense/Overrides.ts -var RESOURCEPATH4 = "/overrides"; -var Overrides = class _Overrides { - constructor(collectionName, apiCall) { - this.collectionName = collectionName; - this.apiCall = apiCall; - } - async upsert(overrideId, params) { - return this.apiCall.put( - this.endpointPath(overrideId), - params - ); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - endpointPath(operation) { - return `${Collections.RESOURCEPATH}/${this.collectionName}${_Overrides.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH4; - } -}; - -// src/Typesense/Override.ts -var Override = class { - constructor(collectionName, overrideId, apiCall) { - this.collectionName = collectionName; - this.overrideId = overrideId; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`; - } -}; - -// src/Typesense/Synonyms.ts -var RESOURCEPATH5 = "/synonyms"; -var Synonyms = class _Synonyms { - constructor(collectionName, apiCall) { - this.collectionName = collectionName; - this.apiCall = apiCall; - } - async upsert(synonymId, params) { - return this.apiCall.put( - this.endpointPath(synonymId), - params - ); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - endpointPath(operation) { - return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${_Synonyms.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH5; - } -}; - -// src/Typesense/Synonym.ts -var Synonym = class { - constructor(collectionName, synonymId, apiCall) { - this.collectionName = collectionName; - this.synonymId = synonymId; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`; - } -}; - -// src/Typesense/Document.ts -var Document = class { - constructor(collectionName, documentId, apiCall) { - this.collectionName = collectionName; - this.documentId = documentId; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete(options) { - return this.apiCall.delete(this.endpointPath(), options); - } - async update(partialDocument, options = {}) { - return this.apiCall.patch(this.endpointPath(), partialDocument, options); - } - endpointPath() { - return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`; - } -}; - -// src/Typesense/Collection.ts -var Collection = class { - constructor(name, apiCall, configuration) { - this.name = name; - this.apiCall = apiCall; - this.configuration = configuration; - this.individualDocuments = {}; - this.individualOverrides = {}; - this.individualSynonyms = {}; - this.name = name; - this.apiCall = apiCall; - this.configuration = configuration; - this._documents = new Documents( - this.name, - this.apiCall, - this.configuration - ); - this._overrides = new Overrides(this.name, this.apiCall); - this._synonyms = new Synonyms(this.name, this.apiCall); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async update(schema) { - return this.apiCall.patch(this.endpointPath(), schema); - } - async delete(options = {}) { - return this.apiCall.delete(this.endpointPath(), options); - } - async exists() { - try { - await this.retrieve(); - return true; - } catch (e) { - if (e instanceof ObjectNotFound) return false; - throw e; - } - } - documents(documentId) { - if (!documentId) { - return this._documents; - } else { - if (this.individualDocuments[documentId] === undefined) { - this.individualDocuments[documentId] = new Document( - this.name, - documentId, - this.apiCall - ); - } - return this.individualDocuments[documentId]; - } - } - overrides(overrideId) { - if (overrideId === undefined) { - return this._overrides; - } else { - if (this.individualOverrides[overrideId] === undefined) { - this.individualOverrides[overrideId] = new Override( - this.name, - overrideId, - this.apiCall - ); - } - return this.individualOverrides[overrideId]; - } - } - synonyms(synonymId) { - if (synonymId === undefined) { - return this._synonyms; - } else { - if (this.individualSynonyms[synonymId] === undefined) { - this.individualSynonyms[synonymId] = new Synonym( - this.name, - synonymId, - this.apiCall - ); - } - return this.individualSynonyms[synonymId]; - } - } - endpointPath() { - return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`; - } -}; - -// src/Typesense/Aliases.ts -var RESOURCEPATH6 = "/aliases"; -var Aliases = class _Aliases { - constructor(apiCall) { - this.apiCall = apiCall; - } - async upsert(name, mapping) { - return this.apiCall.put( - this.endpointPath(name), - mapping - ); - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH6); - } - endpointPath(aliasName) { - return `${_Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH6; - } -}; - -// src/Typesense/Alias.ts -var Alias = class { - constructor(name, apiCall) { - this.name = name; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`; - } -}; - -// src/Typesense/Keys.ts -var import_crypto = __toESM(require_crypto()); -var RESOURCEPATH7 = "/keys"; -var Keys = class _Keys { - constructor(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - async create(params) { - return this.apiCall.post(_Keys.RESOURCEPATH, params); - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH7); - } - generateScopedSearchKey(searchKey, parameters) { - const normalizedParams = normalizeArrayableParams(parameters); - const paramsJSON = JSON.stringify(normalizedParams); - const digest = Buffer.from( - (0, import_crypto.createHmac)("sha256", searchKey).update(paramsJSON).digest("base64") - ); - const keyPrefix = searchKey.substr(0, 4); - const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`; - return Buffer.from(rawScopedKey).toString("base64"); - } - static get RESOURCEPATH() { - return RESOURCEPATH7; - } -}; - -// src/Typesense/Key.ts -var Key = class { - constructor(id, apiCall) { - this.id = id; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`; - } -}; - -// src/Typesense/Debug.ts -var RESOURCEPATH8 = "/debug"; -var Debug = class { - constructor(apiCall) { - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH8); - } -}; - -// src/Typesense/Metrics.ts -var RESOURCEPATH9 = "/metrics.json"; -var Metrics = class { - constructor(apiCall) { - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH9); - } -}; - -// src/Typesense/Stats.ts -var RESOURCEPATH10 = "/stats.json"; -var Metrics2 = class { - constructor(apiCall) { - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH10); - } -}; - -// src/Typesense/Health.ts -var RESOURCEPATH11 = "/health"; -var Health = class { - constructor(apiCall) { - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH11); - } -}; - -// src/Typesense/Operations.ts -var RESOURCEPATH12 = "/operations"; -var Operations = class { - constructor(apiCall) { - this.apiCall = apiCall; - } - async perform(operationName, queryParameters = {}) { - return this.apiCall.post( - `${RESOURCEPATH12}/${operationName}`, - {}, - queryParameters - ); - } -}; - -// src/Typesense/Presets.ts -var RESOURCEPATH13 = "/presets"; -var Presets = class _Presets { - constructor(apiCall) { - this.apiCall = apiCall; - } - async upsert(presetId, params) { - if (typeof params.value === "object" && "searches" in params.value) { - const normalizedParams2 = params.value.searches.map( - (search) => normalizeArrayableParams(search) - ); - return this.apiCall.put(this.endpointPath(presetId), { - value: { searches: normalizedParams2 } - }); - } - const normalizedParams = normalizeArrayableParams(params.value); - return this.apiCall.put(this.endpointPath(presetId), { - value: normalizedParams - }); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - endpointPath(operation) { - return `${_Presets.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH13; - } -}; - -// src/Typesense/Preset.ts -var Preset = class { - constructor(presetId, apiCall) { - this.presetId = presetId; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`; - } -}; - -// src/Typesense/AnalyticsRules.ts -var RESOURCEPATH14 = "/analytics/rules"; -var AnalyticsRules = class _AnalyticsRules { - constructor(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - async upsert(name, params) { - return this.apiCall.put( - this.endpointPath(name), - params - ); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - endpointPath(operation) { - return `${_AnalyticsRules.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH14; - } -}; - -// src/Typesense/AnalyticsRule.ts -var AnalyticsRule = class { - constructor(name, apiCall) { - this.name = name; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`; - } -}; - -// src/Typesense/AnalyticsEvents.ts -var RESOURCEPATH15 = "/analytics/events"; -var AnalyticsEvents = class _AnalyticsEvents { - constructor(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - async create(params) { - return this.apiCall.post( - this.endpointPath(), - params - ); - } - endpointPath(operation) { - return `${_AnalyticsEvents.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH15; - } -}; - -// src/Typesense/Analytics.ts -var RESOURCEPATH16 = "/analytics"; -var Analytics = class { - constructor(apiCall) { - this.apiCall = apiCall; - this.individualAnalyticsRules = {}; - this.apiCall = apiCall; - this._analyticsRules = new AnalyticsRules(this.apiCall); - this._analyticsEvents = new AnalyticsEvents(this.apiCall); - } - rules(id) { - if (id === undefined) { - return this._analyticsRules; - } else { - if (this.individualAnalyticsRules[id] === undefined) { - this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall); - } - return this.individualAnalyticsRules[id]; - } - } - events() { - return this._analyticsEvents; - } - static get RESOURCEPATH() { - return RESOURCEPATH16; - } -}; - -// src/Typesense/Stopwords.ts -var RESOURCEPATH17 = "/stopwords"; -var Stopwords = class _Stopwords { - constructor(apiCall) { - this.apiCall = apiCall; - } - async upsert(stopwordId, params) { - return this.apiCall.put( - this.endpointPath(stopwordId), - params - ); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - endpointPath(operation) { - return `${_Stopwords.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH17; - } -}; - -// src/Typesense/Stopword.ts -var Stopword = class { - constructor(stopwordId, apiCall) { - this.stopwordId = stopwordId; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`; - } -}; - -// src/Typesense/ConversationModels.ts -var RESOURCEPATH18 = "/conversations/models"; -var ConversationModels = class _ConversationModels { - constructor(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - async create(params) { - return this.apiCall.post( - this.endpointPath(), - params - ); - } - async retrieve() { - return this.apiCall.get( - this.endpointPath() - ); - } - endpointPath(operation) { - return `${_ConversationModels.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH18; - } -}; - -// src/Typesense/ConversationModel.ts -var ConversationModel = class { - constructor(id, apiCall) { - this.id = id; - this.apiCall = apiCall; - } - async update(params) { - return this.apiCall.put( - this.endpointPath(), - params - ); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete( - this.endpointPath() - ); - } - endpointPath() { - return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`; - } -}; - -// src/Typesense/Conversations.ts -var RESOURCEPATH19 = "/conversations"; -var Conversations = class { - constructor(apiCall) { - this.apiCall = apiCall; - this.individualConversationModels = {}; - this.apiCall = apiCall; - this._conversationsModels = new ConversationModels(this.apiCall); - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH19); - } - models(id) { - if (id === undefined) { - return this._conversationsModels; - } else { - if (this.individualConversationModels[id] === undefined) { - this.individualConversationModels[id] = new ConversationModel( - id, - this.apiCall - ); - } - return this.individualConversationModels[id]; - } - } - static get RESOURCEPATH() { - return RESOURCEPATH19; - } -}; - -// src/Typesense/Conversation.ts -var Conversation = class { - constructor(id, apiCall) { - this.id = id; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async update(params) { - return this.apiCall.put( - this.endpointPath(), - params - ); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`; - } -}; - -// src/Typesense/StemmingDictionaries.ts -var RESOURCEPATH20 = "/stemming/dictionaries"; -var StemmingDictionaries = class _StemmingDictionaries { - constructor(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - async upsert(id, wordRootCombinations) { - const wordRootCombinationsInJSONLFormat = Array.isArray( - wordRootCombinations - ) ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join("\n") : wordRootCombinations; - const resultsInJSONLFormat = await this.apiCall.performRequest( - "post", - this.endpointPath("import"), - { - queryParameters: { id }, - bodyParameters: wordRootCombinationsInJSONLFormat, - additionalHeaders: { "Content-Type": "text/plain" }, - skipConnectionTimeout: true - } - ); - return Array.isArray(wordRootCombinations) ? resultsInJSONLFormat.split("\n").map((line) => JSON.parse(line)) : resultsInJSONLFormat; - } - async retrieve() { - return this.apiCall.get( - this.endpointPath() - ); - } - endpointPath(operation) { - return operation === undefined ? `${_StemmingDictionaries.RESOURCEPATH}` : `${_StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH20; - } -}; - -// src/Typesense/StemmingDictionary.ts -var StemmingDictionary = class { - constructor(id, apiCall) { - this.id = id; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - endpointPath() { - return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`; - } -}; - -// src/Typesense/Stemming.ts -var RESOURCEPATH21 = "/stemming"; -var Stemming = class { - constructor(apiCall) { - this.apiCall = apiCall; - this.individualStemmingDictionaries = {}; - this.apiCall = apiCall; - this._stemmingDictionaries = new StemmingDictionaries(this.apiCall); - } - dictionaries(id) { - if (id === undefined) { - return this._stemmingDictionaries; - } else { - if (this.individualStemmingDictionaries[id] === undefined) { - this.individualStemmingDictionaries[id] = new StemmingDictionary( - id, - this.apiCall - ); - } - return this.individualStemmingDictionaries[id]; - } - } - static get RESOURCEPATH() { - return RESOURCEPATH21; - } -}; - -// src/Typesense/Client.ts -var Client = class { - constructor(options) { - options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false; - this.configuration = new Configuration(options); - this.apiCall = new ApiCall(this.configuration); - this.debug = new Debug(this.apiCall); - this.metrics = new Metrics(this.apiCall); - this.stats = new Metrics2(this.apiCall); - this.health = new Health(this.apiCall); - this.operations = new Operations(this.apiCall); - this.multiSearch = new MultiSearch(this.apiCall, this.configuration); - this._collections = new Collections(this.apiCall); - this.individualCollections = {}; - this._aliases = new Aliases(this.apiCall); - this.individualAliases = {}; - this._keys = new Keys(this.apiCall); - this.individualKeys = {}; - this._presets = new Presets(this.apiCall); - this.individualPresets = {}; - this._stopwords = new Stopwords(this.apiCall); - this.individualStopwords = {}; - this.analytics = new Analytics(this.apiCall); - this.stemming = new Stemming(this.apiCall); - this._conversations = new Conversations(this.apiCall); - this.individualConversations = {}; - } - collections(collectionName) { - if (collectionName === undefined) { - return this._collections; - } else { - if (this.individualCollections[collectionName] === undefined) { - this.individualCollections[collectionName] = new Collection( - collectionName, - this.apiCall, - this.configuration - ); - } - return this.individualCollections[collectionName]; - } - } - aliases(aliasName) { - if (aliasName === undefined) { - return this._aliases; - } else { - if (this.individualAliases[aliasName] === undefined) { - this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall); - } - return this.individualAliases[aliasName]; - } - } - keys(id) { - if (id === undefined) { - return this._keys; - } else { - if (this.individualKeys[id] === undefined) { - this.individualKeys[id] = new Key(id, this.apiCall); - } - return this.individualKeys[id]; - } - } - presets(id) { - if (id === undefined) { - return this._presets; - } else { - if (this.individualPresets[id] === undefined) { - this.individualPresets[id] = new Preset(id, this.apiCall); - } - return this.individualPresets[id]; - } - } - stopwords(id) { - if (id === undefined) { - return this._stopwords; - } else { - if (this.individualStopwords[id] === undefined) { - this.individualStopwords[id] = new Stopword(id, this.apiCall); - } - return this.individualStopwords[id]; - } - } - conversations(id) { - if (id === undefined) { - return this._conversations; - } else { - if (this.individualConversations[id] === undefined) { - this.individualConversations[id] = new Conversation(id, this.apiCall); - } - return this.individualConversations[id]; - } - } -}; - -exports.Client = Client; -exports.Errors = Errors_exports; -exports.SearchClient = SearchClient; -//# sourceMappingURL=typesense.min.js.map -//# sourceMappingURL=typesense.min.js.map \ No newline at end of file diff --git a/dist/typesense.min.js.map b/dist/typesense.min.js.map deleted file mode 100644 index cc6d19c9..00000000 --- a/dist/typesense.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/Configuration.ts","../src/Typesense/ApiCall.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/Collections.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Utils.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/StemmingDictionaries.ts","../src/Typesense/StemmingDictionary.ts","../src/Typesense/Stemming.ts","../src/Typesense/Client.ts"],"names":["logger","axios","HTTPAgent","HTTPSAgent","RESOURCEPATH","isNodeJSEnvironment","Metrics","normalizedParams"],"mappings":"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","file":"typesense.min.js","sourcesContent":["module.exports = {}","module.exports = {}","module.exports = {}","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport type DeleteQuery =\n | {\n truncate?: true;\n }\n | {\n truncate?: never;\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n };\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n max_filter_by_candidates?: number; // default: 4\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n rerank_hybrid_matches?: boolean;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n union?: true;\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopolygon\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema\n extends Pick<\n CollectionCreateSchema,\n \"token_separators\" | \"symbols_to_index\"\n > {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName:\n | \"vote\"\n | \"snapshot\"\n | \"cache/clear\"\n | \"schema_changes\"\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters,\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport type { StemmingDictionaryCreateSchema } from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming/dictionaries\";\n\nexport interface StemmingDictionariesRetrieveSchema {\n dictionaries: string[];\n}\n\nexport default class StemmingDictionaries {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n id: string,\n wordRootCombinations: StemmingDictionaryCreateSchema[] | string,\n ): Promise {\n const wordRootCombinationsInJSONLFormat = Array.isArray(\n wordRootCombinations,\n )\n ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join(\"\\n\")\n : wordRootCombinations;\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: {id},\n bodyParameters: wordRootCombinationsInJSONLFormat,\n additionalHeaders: {\"Content-Type\": \"text/plain\"},\n skipConnectionTimeout: true,\n }\n );\n\n return Array.isArray(wordRootCombinations)\n ? resultsInJSONLFormat\n .split(\"\\n\")\n .map((line) => JSON.parse(line) as StemmingDictionaryCreateSchema)\n : resultsInJSONLFormat;\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return operation === undefined\n ? `${StemmingDictionaries.RESOURCEPATH}`\n : `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\n\nexport interface StemmingDictionaryCreateSchema {\n root: string;\n word: string;\n}\n\nexport interface StemmingDictionarySchema {\n id: string;\n words: StemmingDictionaryCreateSchema[];\n}\n\nexport default class StemmingDictionary {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import type ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\nimport StemmingDictionary from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming\";\n\nexport default class Stemming {\n private readonly _stemmingDictionaries: StemmingDictionaries;\n private readonly individualStemmingDictionaries: Record<\n string,\n StemmingDictionary\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._stemmingDictionaries = new StemmingDictionaries(this.apiCall);\n }\n\n dictionaries(): StemmingDictionaries;\n dictionaries(id: string): StemmingDictionary;\n dictionaries(id?: string): StemmingDictionaries | StemmingDictionary {\n if (id === undefined) {\n return this._stemmingDictionaries;\n } else {\n if (this.individualStemmingDictionaries[id] === undefined) {\n this.individualStemmingDictionaries[id] = new StemmingDictionary(\n id,\n this.apiCall,\n );\n }\n return this.individualStemmingDictionaries[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\nimport Stemming from \"./Stemming\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n stemming: Stemming;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this.stemming = new Stemming(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"]} \ No newline at end of file diff --git a/dist/typesense.min.mjs b/dist/typesense.min.mjs deleted file mode 100644 index b17ac3cb..00000000 --- a/dist/typesense.min.mjs +++ /dev/null @@ -1,1774 +0,0 @@ -import logger from 'loglevel'; -import axios from 'axios'; - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); - -// node-modules-polyfills-empty:http -var require_http = __commonJS({ - "node-modules-polyfills-empty:http"(exports, module) { - module.exports = {}; - } -}); - -// node-modules-polyfills-empty:https -var require_https = __commonJS({ - "node-modules-polyfills-empty:https"(exports, module) { - module.exports = {}; - } -}); - -// node-modules-polyfills-empty:crypto -var require_crypto = __commonJS({ - "node-modules-polyfills-empty:crypto"(exports, module) { - module.exports = {}; - } -}); - -// src/Typesense/Errors/index.ts -var Errors_exports = {}; -__export(Errors_exports, { - HTTPError: () => HTTPError, - ImportError: () => ImportError, - MissingConfigurationError: () => MissingConfigurationError, - ObjectAlreadyExists: () => ObjectAlreadyExists, - ObjectNotFound: () => ObjectNotFound, - ObjectUnprocessable: () => ObjectUnprocessable, - RequestMalformed: () => RequestMalformed, - RequestUnauthorized: () => RequestUnauthorized, - ServerError: () => ServerError, - TypesenseError: () => TypesenseError -}); - -// src/Typesense/Errors/TypesenseError.ts -var TypesenseError = class extends Error { - // Source: https://stackoverflow.com/a/58417721/123545 - constructor(message, httpBody, httpStatus) { - super(message); - this.name = new.target.name; - this.httpBody = httpBody; - this.httpStatus = httpStatus; - Object.setPrototypeOf(this, new.target.prototype); - } -}; - -// src/Typesense/Errors/HTTPError.ts -var HTTPError = class extends TypesenseError { -}; - -// src/Typesense/Errors/MissingConfigurationError.ts -var MissingConfigurationError = class extends TypesenseError { -}; - -// src/Typesense/Errors/ObjectAlreadyExists.ts -var ObjectAlreadyExists = class extends TypesenseError { -}; - -// src/Typesense/Errors/ObjectNotFound.ts -var ObjectNotFound = class extends TypesenseError { -}; - -// src/Typesense/Errors/ObjectUnprocessable.ts -var ObjectUnprocessable = class extends TypesenseError { -}; - -// src/Typesense/Errors/RequestMalformed.ts -var RequestMalformed = class extends TypesenseError { -}; - -// src/Typesense/Errors/RequestUnauthorized.ts -var RequestUnauthorized = class extends TypesenseError { -}; - -// src/Typesense/Errors/ServerError.ts -var ServerError = class extends TypesenseError { -}; - -// src/Typesense/Errors/ImportError.ts -var ImportError = class extends TypesenseError { - constructor(message, importResults, payload) { - super(message); - this.importResults = importResults; - this.payload = payload; - } -}; - -// src/Typesense/Configuration.ts -var Configuration = class { - constructor(options) { - this.nodes = options.nodes || []; - this.nodes = this.nodes.map((node) => this.setDefaultPathInNode(node)).map((node) => this.setDefaultPortInNode(node)).map((node) => ({ ...node })); - if (options.randomizeNodes == null) { - options.randomizeNodes = true; - } - if (options.randomizeNodes === true) { - this.shuffleArray(this.nodes); - } - this.nearestNode = options.nearestNode; - this.nearestNode = this.setDefaultPathInNode(this.nearestNode); - this.nearestNode = this.setDefaultPortInNode(this.nearestNode); - this.connectionTimeoutSeconds = options.connectionTimeoutSeconds || options.timeoutSeconds || 5; - this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60; - this.numRetries = (options.numRetries !== undefined && options.numRetries >= 0 ? options.numRetries : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3; - this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1; - this.apiKey = options.apiKey; - this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; - this.cacheSearchResultsForSeconds = options.cacheSearchResultsForSeconds || 0; - this.useServerSideSearchCache = options.useServerSideSearchCache || false; - this.axiosAdapter = options.axiosAdapter; - this.logger = options.logger || logger; - this.logLevel = options.logLevel || "warn"; - this.logger.setLevel(this.logLevel); - this.additionalHeaders = options.additionalHeaders; - this.httpAgent = options.httpAgent; - this.httpsAgent = options.httpsAgent; - this.paramsSerializer = options.paramsSerializer; - this.showDeprecationWarnings(options); - this.validate(); - } - validate() { - if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) { - throw new MissingConfigurationError( - "Ensure that nodes[].protocol, nodes[].host and nodes[].port are set" - ); - } - if (this.nearestNode != null && this.isNodeMissingAnyParameters(this.nearestNode)) { - throw new MissingConfigurationError( - "Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set" - ); - } - if (this.apiKey == null) { - throw new MissingConfigurationError("Ensure that apiKey is set"); - } - return true; - } - validateNodes() { - return this.nodes.some((node) => { - return this.isNodeMissingAnyParameters(node); - }); - } - isNodeMissingAnyParameters(node) { - return !["protocol", "host", "port", "path"].every((key) => { - return node.hasOwnProperty(key); - }) && node["url"] == null; - } - setDefaultPathInNode(node) { - if (node != null && !node.hasOwnProperty("path")) { - node["path"] = ""; - } - return node; - } - setDefaultPortInNode(node) { - if (node != null && !node.hasOwnProperty("port") && node.hasOwnProperty("protocol")) { - switch (node["protocol"]) { - case "https": - node["port"] = 443; - break; - case "http": - node["port"] = 80; - break; - } - } - return node; - } - showDeprecationWarnings(options) { - if (options.timeoutSeconds) { - this.logger.warn( - "Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds" - ); - } - if (options.masterNode) { - this.logger.warn( - "Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12" - ); - } - if (options.readReplicaNodes) { - this.logger.warn( - "Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12" - ); - } - } - shuffleArray(array) { - for (let i = array.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [array[i], array[j]] = [array[j], array[i]]; - } - } -}; - -// src/Typesense/ApiCall.ts -var import_http = __toESM(require_http()); -var import_https = __toESM(require_https()); -var APIKEYHEADERNAME = "X-TYPESENSE-API-KEY"; -var HEALTHY = true; -var UNHEALTHY = false; -var isNodeJSEnvironment = typeof process !== "undefined" && process.versions != null && process.versions.node != null; -var ApiCall = class { - constructor(configuration) { - this.configuration = configuration; - this.apiKey = this.configuration.apiKey; - this.nodes = this.configuration.nodes == null ? this.configuration.nodes : JSON.parse(JSON.stringify(this.configuration.nodes)); - this.nearestNode = this.configuration.nearestNode == null ? this.configuration.nearestNode : JSON.parse(JSON.stringify(this.configuration.nearestNode)); - this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds; - this.healthcheckIntervalSeconds = this.configuration.healthcheckIntervalSeconds; - this.numRetriesPerRequest = this.configuration.numRetries; - this.retryIntervalSeconds = this.configuration.retryIntervalSeconds; - this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam; - this.additionalUserHeaders = this.configuration.additionalHeaders; - this.logger = this.configuration.logger; - this.initializeMetadataForNodes(); - this.currentNodeIndex = -1; - } - async get(endpoint, queryParameters = {}, { - abortSignal = null, - responseType = undefined - } = {}) { - return this.performRequest("get", endpoint, { - queryParameters, - abortSignal, - responseType - }); - } - async delete(endpoint, queryParameters = {}) { - return this.performRequest("delete", endpoint, { queryParameters }); - } - async post(endpoint, bodyParameters = {}, queryParameters = {}, additionalHeaders = {}) { - return this.performRequest("post", endpoint, { - queryParameters, - bodyParameters, - additionalHeaders - }); - } - async put(endpoint, bodyParameters = {}, queryParameters = {}) { - return this.performRequest("put", endpoint, { - queryParameters, - bodyParameters - }); - } - async patch(endpoint, bodyParameters = {}, queryParameters = {}) { - return this.performRequest("patch", endpoint, { - queryParameters, - bodyParameters - }); - } - getAdapter() { - if (!this.configuration.axiosAdapter) return undefined; - if (typeof this.configuration.axiosAdapter === "function") - return this.configuration.axiosAdapter; - const isCloudflareWorkers = typeof navigator !== "undefined" && navigator.userAgent === "Cloudflare-Workers"; - return isCloudflareWorkers ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis) : axios.getAdapter(this.configuration.axiosAdapter); - } - async performRequest(requestType, endpoint, { - queryParameters = null, - bodyParameters = null, - additionalHeaders = {}, - abortSignal = null, - responseType = undefined, - skipConnectionTimeout = false, - enableKeepAlive = undefined - }) { - this.configuration.validate(); - const requestNumber = Date.now(); - let lastException; - let wasAborted = false; - this.logger.debug( - `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}` - ); - for (let numTries = 1; numTries <= this.numRetriesPerRequest + 1; numTries++) { - const node = this.getNextNode(requestNumber); - this.logger.debug( - `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${node.index}` - ); - if (abortSignal && abortSignal.aborted) { - return Promise.reject(new Error("Request aborted by caller.")); - } - let abortListener; - try { - const requestOptions = { - adapter: this.getAdapter(), - method: requestType, - url: this.uriFor(endpoint, node), - headers: Object.assign( - {}, - this.defaultHeaders(), - additionalHeaders, - this.additionalUserHeaders - ), - maxContentLength: Infinity, - maxBodyLength: Infinity, - responseType, - validateStatus: (status) => { - return status > 0; - }, - transformResponse: [ - (data, headers) => { - let transformedData = data; - if (headers !== void 0 && typeof data === "string" && headers["content-type"] && headers["content-type"].startsWith("application/json")) { - transformedData = JSON.parse(data); - } - return transformedData; - } - ] - }; - if (skipConnectionTimeout !== true) { - requestOptions.timeout = this.connectionTimeoutSeconds * 1e3; - } - if (queryParameters && Object.keys(queryParameters).length !== 0) { - requestOptions.params = queryParameters; - } - if (this.sendApiKeyAsQueryParam) { - requestOptions.params = requestOptions.params || {}; - requestOptions.params["x-typesense-api-key"] = this.apiKey; - } - if (this.configuration.httpAgent) { - this.logger.debug( - `Request #${requestNumber}: Using custom httpAgent` - ); - requestOptions.httpAgent = this.configuration.httpAgent; - } else if (enableKeepAlive === true) { - if (!isNodeJSEnvironment) { - this.logger.warn( - `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive` - ); - } else { - this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`); - requestOptions.httpAgent = new import_http.Agent({ keepAlive: true }); - } - } - if (this.configuration.httpsAgent) { - this.logger.debug( - `Request #${requestNumber}: Using custom httpsAgent` - ); - requestOptions.httpsAgent = this.configuration.httpsAgent; - } else if (enableKeepAlive === true) { - if (!isNodeJSEnvironment) { - this.logger.warn( - `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive` - ); - } else { - this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`); - requestOptions.httpsAgent = new import_https.Agent({ keepAlive: true }); - } - } - if (this.configuration.paramsSerializer) { - this.logger.debug( - `Request #${requestNumber}: Using custom paramsSerializer` - ); - requestOptions.paramsSerializer = this.configuration.paramsSerializer; - } - if (bodyParameters && (typeof bodyParameters === "string" && bodyParameters.length !== 0 || typeof bodyParameters === "object" && Object.keys(bodyParameters).length !== 0)) { - requestOptions.data = bodyParameters; - } - if (abortSignal) { - const cancelToken = axios.CancelToken; - const source = cancelToken.source(); - abortListener = () => { - wasAborted = true; - source.cancel(); - }; - abortSignal.addEventListener("abort", abortListener); - requestOptions.cancelToken = source.token; - } - const response = await axios(requestOptions); - if (response.status >= 1 && response.status <= 499) { - this.setNodeHealthcheck(node, HEALTHY); - } - this.logger.debug( - `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.` - ); - if (response.status >= 200 && response.status < 300) { - return Promise.resolve(response.data); - } else if (response.status < 500) { - return Promise.reject( - this.customErrorForResponse( - response, - response.data?.message, - requestOptions.data - ) - ); - } else { - throw this.customErrorForResponse( - response, - response.data?.message, - requestOptions.data - ); - } - } catch (error) { - if (!wasAborted) { - this.setNodeHealthcheck(node, UNHEALTHY); - } - lastException = error; - this.logger.warn( - `Request #${requestNumber}: Request to Node ${node.index} failed due to "${error?.code ?? ""} ${error.message}${error.response == null ? "" : " - " + JSON.stringify(error.response?.data)}"` - ); - if (wasAborted) { - return Promise.reject(new Error("Request aborted by caller.")); - } - if (numTries < this.numRetriesPerRequest + 1) { - this.logger.warn( - `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...` - ); - } - await this.timer(this.retryIntervalSeconds); - } finally { - if (abortSignal && abortListener) { - abortSignal.removeEventListener("abort", abortListener); - } - } - } - this.logger.debug( - `Request #${requestNumber}: No retries left. Raising last error` - ); - return Promise.reject(lastException); - } - // Attempts to find the next healthy node, looping through the list of nodes once. - // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy - // so we can try the request for good measure, in case that node has become healthy since - getNextNode(requestNumber = 0) { - if (this.nearestNode != null) { - this.logger.debug( - `Request #${requestNumber}: Nodes Health: Node ${this.nearestNode.index} is ${this.nearestNode.isHealthy === true ? "Healthy" : "Unhealthy"}` - ); - if (this.nearestNode.isHealthy === true || this.nodeDueForHealthcheck(this.nearestNode, requestNumber)) { - this.logger.debug( - `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}` - ); - return this.nearestNode; - } - this.logger.debug( - `Request #${requestNumber}: Falling back to individual nodes` - ); - } - this.logger.debug( - `Request #${requestNumber}: Nodes Health: ${this.nodes.map( - (node) => `Node ${node.index} is ${node.isHealthy === true ? "Healthy" : "Unhealthy"}` - ).join(" || ")}` - ); - let candidateNode = this.nodes[0]; - for (let i = 0; i <= this.nodes.length; i++) { - this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length; - candidateNode = this.nodes[this.currentNodeIndex]; - if (candidateNode.isHealthy === true || this.nodeDueForHealthcheck(candidateNode, requestNumber)) { - this.logger.debug( - `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}` - ); - return candidateNode; - } - } - this.logger.debug( - `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}` - ); - return candidateNode; - } - nodeDueForHealthcheck(node, requestNumber = 0) { - const isDueForHealthcheck = Date.now() - node.lastAccessTimestamp > this.healthcheckIntervalSeconds * 1e3; - if (isDueForHealthcheck) { - this.logger.debug( - `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.` - ); - } - return isDueForHealthcheck; - } - initializeMetadataForNodes() { - if (this.nearestNode != null) { - this.nearestNode.index = "nearestNode"; - this.setNodeHealthcheck(this.nearestNode, HEALTHY); - } - this.nodes.forEach((node, i) => { - node.index = i; - this.setNodeHealthcheck(node, HEALTHY); - }); - } - setNodeHealthcheck(node, isHealthy) { - node.isHealthy = isHealthy; - node.lastAccessTimestamp = Date.now(); - } - uriFor(endpoint, node) { - if (node.url != null) { - return `${node.url}${endpoint}`; - } - return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`; - } - defaultHeaders() { - const defaultHeaders = {}; - if (!this.sendApiKeyAsQueryParam) { - defaultHeaders[APIKEYHEADERNAME] = this.apiKey; - } - defaultHeaders["Content-Type"] = "application/json"; - return defaultHeaders; - } - async timer(seconds) { - return new Promise((resolve) => setTimeout(resolve, seconds * 1e3)); - } - customErrorForResponse(response, messageFromServer, httpBody) { - let errorMessage = `Request failed with HTTP code ${response.status}`; - if (typeof messageFromServer === "string" && messageFromServer.trim() !== "") { - errorMessage += ` | Server said: ${messageFromServer}`; - } - let error = new TypesenseError(errorMessage, httpBody, response.status); - if (response.status === 400) { - error = new RequestMalformed(errorMessage); - } else if (response.status === 401) { - error = new RequestUnauthorized(errorMessage); - } else if (response.status === 404) { - error = new ObjectNotFound(errorMessage); - } else if (response.status === 409) { - error = new ObjectAlreadyExists(errorMessage); - } else if (response.status === 422) { - error = new ObjectUnprocessable(errorMessage); - } else if (response.status >= 500 && response.status <= 599) { - error = new ServerError(errorMessage); - } else { - error = new HTTPError(errorMessage); - } - return error; - } -}; - -// src/Typesense/RequestWithCache.ts -var defaultCacheResponseForSeconds = 2 * 60; -var defaultMaxSize = 100; -var RequestWithCache = class { - constructor() { - this.responseCache = /* @__PURE__ */ new Map(); - this.responsePromiseCache = /* @__PURE__ */ new Map(); - } - clearCache() { - this.responseCache = /* @__PURE__ */ new Map(); - this.responsePromiseCache = /* @__PURE__ */ new Map(); - } - // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way - async perform(requestContext, requestFunction, requestFunctionArguments, cacheOptions) { - const { - cacheResponseForSeconds = defaultCacheResponseForSeconds, - maxSize = defaultMaxSize - } = cacheOptions; - const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0; - if (isCacheDisabled) { - return requestFunction.call(requestContext, ...requestFunctionArguments); - } - const requestFunctionArgumentsJSON = JSON.stringify( - requestFunctionArguments - ); - const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON); - const now = Date.now(); - if (cacheEntry) { - const isEntryValid = now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1e3; - if (isEntryValid) { - this.responseCache.delete(requestFunctionArgumentsJSON); - this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry); - return Promise.resolve(cacheEntry.response); - } else { - this.responseCache.delete(requestFunctionArgumentsJSON); - } - } - const cachePromiseEntry = this.responsePromiseCache.get( - requestFunctionArgumentsJSON - ); - if (cachePromiseEntry) { - const isEntryValid = now - cachePromiseEntry.requestTimestamp < cacheResponseForSeconds * 1e3; - if (isEntryValid) { - this.responsePromiseCache.delete(requestFunctionArgumentsJSON); - this.responsePromiseCache.set( - requestFunctionArgumentsJSON, - cachePromiseEntry - ); - return cachePromiseEntry.responsePromise; - } else { - this.responsePromiseCache.delete(requestFunctionArgumentsJSON); - } - } - const responsePromise = requestFunction.call( - requestContext, - ...requestFunctionArguments - ); - this.responsePromiseCache.set(requestFunctionArgumentsJSON, { - requestTimestamp: now, - responsePromise - }); - const response = await responsePromise; - this.responseCache.set(requestFunctionArgumentsJSON, { - requestTimestamp: now, - response - }); - const isCacheOverMaxSize = this.responseCache.size > maxSize; - if (isCacheOverMaxSize) { - const oldestEntry = this.responseCache.keys().next().value; - if (oldestEntry) { - this.responseCache.delete(oldestEntry); - } - } - const isResponsePromiseCacheOverMaxSize = this.responsePromiseCache.size > maxSize; - if (isResponsePromiseCacheOverMaxSize) { - const oldestEntry = this.responsePromiseCache.keys().next().value; - if (oldestEntry) { - this.responsePromiseCache.delete(oldestEntry); - } - } - return response; - } -}; - -// src/Typesense/Collections.ts -var RESOURCEPATH = "/collections"; -var Collections = class { - constructor(apiCall) { - this.apiCall = apiCall; - } - async create(schema, options = {}) { - return this.apiCall.post(RESOURCEPATH, schema, options); - } - async retrieve(options = {}) { - return this.apiCall.get(RESOURCEPATH, options); - } - static get RESOURCEPATH() { - return RESOURCEPATH; - } -}; - -// src/Typesense/SearchOnlyDocuments.ts -var RESOURCEPATH2 = "/documents"; -var SearchOnlyDocuments = class { - constructor(collectionName, apiCall, configuration) { - this.collectionName = collectionName; - this.apiCall = apiCall; - this.configuration = configuration; - this.requestWithCache = new RequestWithCache(); - } - clearCache() { - this.requestWithCache.clearCache(); - } - async search(searchParameters, { - cacheSearchResultsForSeconds = this.configuration.cacheSearchResultsForSeconds, - abortSignal = null - } = {}) { - const additionalQueryParams = {}; - if (this.configuration.useServerSideSearchCache === true) { - additionalQueryParams["use_cache"] = true; - } - const normalizedParams = normalizeArrayableParams(searchParameters); - const queryParams = Object.assign( - {}, - additionalQueryParams, - normalizedParams - ); - return this.requestWithCache.perform( - this.apiCall, - this.apiCall.get, - [this.endpointPath("search"), queryParams, { abortSignal }], - { - cacheResponseForSeconds: cacheSearchResultsForSeconds - } - ); - } - endpointPath(operation) { - return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH2}${operation === undefined ? "" : "/" + operation}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH2; - } -}; - -// src/Typesense/Documents.ts -var arrayableParams = { - query_by: "query_by", - query_by_weights: "query_by_weights", - facet_by: "facet_by", - group_by: "group_by", - include_fields: "include_fields", - exclude_fields: "exclude_fields", - highlight_fields: "highlight_fields", - highlight_full_fields: "highlight_full_fields", - pinned_hits: "pinned_hits", - hidden_hits: "hidden_hits", - infix: "infix", - override_tags: "override_tags", - num_typos: "num_typos", - prefix: "prefix", - sort_by: "sort_by" -}; -var isNodeJSEnvironment2 = typeof process !== "undefined" && process.versions != null && process.versions.node != null; -var Documents = class extends SearchOnlyDocuments { - constructor(collectionName, apiCall, configuration) { - super(collectionName, apiCall, configuration); - } - async create(document, options = {}) { - if (!document) throw new Error("No document provided"); - return this.apiCall.post(this.endpointPath(), document, options); - } - async upsert(document, options = {}) { - if (!document) throw new Error("No document provided"); - return this.apiCall.post( - this.endpointPath(), - document, - Object.assign({}, options, { action: "upsert" }) - ); - } - async update(document, options = {}) { - if (!document) throw new Error("No document provided"); - if (options["filter_by"] != null) { - return this.apiCall.patch( - this.endpointPath(), - document, - Object.assign({}, options) - ); - } else { - return this.apiCall.post( - this.endpointPath(), - document, - Object.assign({}, options, { action: "update" }) - ); - } - } - async delete(query = {}) { - return this.apiCall.delete(this.endpointPath(), query); - } - async createMany(documents, options = {}) { - this.configuration.logger.warn( - "createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents" - ); - return this.import(documents, options); - } - async import(documents, options = {}) { - let documentsInJSONLFormat; - if (Array.isArray(documents)) { - try { - documentsInJSONLFormat = documents.map((document) => JSON.stringify(document)).join("\n"); - } catch (error) { - if (error instanceof RangeError && error.message.includes("Too many properties to enumerate")) { - throw new Error(`${error} - It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object - - Please try reducing the number of keys in your document, or using CURL to import your data. - `); - } - throw new Error(error); - } - } else { - documentsInJSONLFormat = documents; - } - const resultsInJSONLFormat = await this.apiCall.performRequest( - "post", - this.endpointPath("import"), - { - queryParameters: options, - bodyParameters: documentsInJSONLFormat, - additionalHeaders: { "Content-Type": "text/plain" }, - skipConnectionTimeout: true, - // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully - enableKeepAlive: isNodeJSEnvironment2 ? true : false - // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 - } - ); - if (Array.isArray(documents)) { - const resultsInJSONFormat = resultsInJSONLFormat.split("\n").map((r) => JSON.parse(r)); - const failedItems = resultsInJSONFormat.filter( - (r) => r.success === false - ); - if (failedItems.length > 0) { - throw new ImportError( - `${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, - resultsInJSONFormat, - { - documentsInJSONLFormat, - options, - failedItems, - successCount: resultsInJSONFormat.length - failedItems.length - } - ); - } else { - return resultsInJSONFormat; - } - } else { - return resultsInJSONLFormat; - } - } - /** - * Imports documents from a NodeJS readable stream of JSONL. - */ - async importStream(readableStream, options = {}) { - const resultsInJSONLFormat = await this.apiCall.performRequest( - "post", - this.endpointPath("import"), - { - queryParameters: options, - bodyParameters: readableStream, - additionalHeaders: { "Content-Type": "text/plain" }, - skipConnectionTimeout: true, - // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully - enableKeepAlive: isNodeJSEnvironment2 ? true : false - // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991 - } - ); - const resultsInJSONFormat = resultsInJSONLFormat.split("\n").map((r) => JSON.parse(r)); - const failedItems = resultsInJSONFormat.filter((r) => r.success === false); - if (failedItems.length > 0) { - throw new ImportError( - `${resultsInJSONFormat.length - failedItems.length} documents imported successfully, ${failedItems.length} documents failed during import. Use \`error.importResults\` from the raised exception to get a detailed error reason for each document.`, - resultsInJSONFormat, - { - documentsInJSONLFormat: readableStream, - options, - failedItems, - successCount: resultsInJSONFormat.length - failedItems.length - } - ); - } else { - return resultsInJSONFormat; - } - } - /** - * Returns a JSONL string for all the documents in this collection - */ - async export(options = {}) { - return this.apiCall.get(this.endpointPath("export"), options); - } - /** - * Returns a NodeJS readable stream of JSONL for all the documents in this collection. - */ - async exportStream(options = {}) { - return this.apiCall.get(this.endpointPath("export"), options, { - responseType: "stream" - }); - } -}; - -// src/Typesense/Utils.ts -function hasNoArrayValues(params) { - return Object.keys(arrayableParams).filter((key) => params[key] !== undefined).every((key) => isNonArrayValue(params[key])); -} -function normalizeArrayableParams(params) { - const result = { ...params }; - const transformedValues = Object.keys(arrayableParams).filter((key) => Array.isArray(result[key])).map((key) => { - result[key] = result[key].join(","); - return key; - }); - if (!transformedValues.length && hasNoArrayValues(result)) { - return result; - } - if (!hasNoArrayValues(result)) { - throw new Error( - `Failed to normalize arrayable params: ${JSON.stringify(result)}` - ); - } - return result; -} -function isNonArrayValue(value) { - return !Array.isArray(value); -} - -// src/Typesense/MultiSearch.ts -var RESOURCEPATH3 = "/multi_search"; -var MultiSearch = class { - constructor(apiCall, configuration, useTextContentType = false) { - this.apiCall = apiCall; - this.configuration = configuration; - this.useTextContentType = useTextContentType; - this.requestWithCache = new RequestWithCache(); - } - clearCache() { - this.requestWithCache.clearCache(); - } - async perform(searchRequests, commonParams = {}, { - cacheSearchResultsForSeconds = this.configuration.cacheSearchResultsForSeconds - } = {}) { - const additionalHeaders = {}; - if (this.useTextContentType) { - additionalHeaders["content-type"] = "text/plain"; - } - const additionalQueryParams = {}; - if (this.configuration.useServerSideSearchCache === true) { - additionalQueryParams["use_cache"] = true; - } - const queryParams = { ...commonParams, ...additionalQueryParams }; - const normalizedSearchRequests = { - searches: searchRequests.searches.map(normalizeArrayableParams) - }; - const normalizedQueryParams = normalizeArrayableParams(queryParams); - return this.requestWithCache.perform( - this.apiCall, - this.apiCall.post, - [ - RESOURCEPATH3, - normalizedSearchRequests, - normalizedQueryParams, - additionalHeaders - ], - { cacheResponseForSeconds: cacheSearchResultsForSeconds } - ); - } -}; - -// src/Typesense/SearchOnlyCollection.ts -var SearchOnlyCollection = class { - constructor(name, apiCall, configuration) { - this.name = name; - this.apiCall = apiCall; - this.configuration = configuration; - this._documents = new SearchOnlyDocuments( - this.name, - this.apiCall, - this.configuration - ); - } - documents() { - return this._documents; - } -}; - -// src/Typesense/SearchClient.ts -var SearchClient = class { - constructor(options) { - options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true; - if (options.sendApiKeyAsQueryParam === true && (options.apiKey || "").length > 2e3) { - console.warn( - "[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter." - ); - options.sendApiKeyAsQueryParam = false; - } - this.configuration = new Configuration(options); - this.apiCall = new ApiCall(this.configuration); - this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true); - this.individualCollections = {}; - } - clearCache() { - this.multiSearch.clearCache(); - Object.entries(this.individualCollections).forEach(([_, collection]) => { - collection.documents().clearCache(); - }); - } - collections(collectionName) { - if (!collectionName) { - throw new Error( - "Typesense.SearchClient only supports search operations, so the collectionName that needs to be searched must be specified. Use Typesense.Client if you need to access the collection object." - ); - } else { - if (this.individualCollections[collectionName] === undefined) { - this.individualCollections[collectionName] = new SearchOnlyCollection( - collectionName, - this.apiCall, - this.configuration - ); - } - return this.individualCollections[collectionName]; - } - } -}; - -// src/Typesense/Overrides.ts -var RESOURCEPATH4 = "/overrides"; -var Overrides = class _Overrides { - constructor(collectionName, apiCall) { - this.collectionName = collectionName; - this.apiCall = apiCall; - } - async upsert(overrideId, params) { - return this.apiCall.put( - this.endpointPath(overrideId), - params - ); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - endpointPath(operation) { - return `${Collections.RESOURCEPATH}/${this.collectionName}${_Overrides.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH4; - } -}; - -// src/Typesense/Override.ts -var Override = class { - constructor(collectionName, overrideId, apiCall) { - this.collectionName = collectionName; - this.overrideId = overrideId; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`; - } -}; - -// src/Typesense/Synonyms.ts -var RESOURCEPATH5 = "/synonyms"; -var Synonyms = class _Synonyms { - constructor(collectionName, apiCall) { - this.collectionName = collectionName; - this.apiCall = apiCall; - } - async upsert(synonymId, params) { - return this.apiCall.put( - this.endpointPath(synonymId), - params - ); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - endpointPath(operation) { - return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${_Synonyms.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH5; - } -}; - -// src/Typesense/Synonym.ts -var Synonym = class { - constructor(collectionName, synonymId, apiCall) { - this.collectionName = collectionName; - this.synonymId = synonymId; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`; - } -}; - -// src/Typesense/Document.ts -var Document = class { - constructor(collectionName, documentId, apiCall) { - this.collectionName = collectionName; - this.documentId = documentId; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete(options) { - return this.apiCall.delete(this.endpointPath(), options); - } - async update(partialDocument, options = {}) { - return this.apiCall.patch(this.endpointPath(), partialDocument, options); - } - endpointPath() { - return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`; - } -}; - -// src/Typesense/Collection.ts -var Collection = class { - constructor(name, apiCall, configuration) { - this.name = name; - this.apiCall = apiCall; - this.configuration = configuration; - this.individualDocuments = {}; - this.individualOverrides = {}; - this.individualSynonyms = {}; - this.name = name; - this.apiCall = apiCall; - this.configuration = configuration; - this._documents = new Documents( - this.name, - this.apiCall, - this.configuration - ); - this._overrides = new Overrides(this.name, this.apiCall); - this._synonyms = new Synonyms(this.name, this.apiCall); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async update(schema) { - return this.apiCall.patch(this.endpointPath(), schema); - } - async delete(options = {}) { - return this.apiCall.delete(this.endpointPath(), options); - } - async exists() { - try { - await this.retrieve(); - return true; - } catch (e) { - if (e instanceof ObjectNotFound) return false; - throw e; - } - } - documents(documentId) { - if (!documentId) { - return this._documents; - } else { - if (this.individualDocuments[documentId] === undefined) { - this.individualDocuments[documentId] = new Document( - this.name, - documentId, - this.apiCall - ); - } - return this.individualDocuments[documentId]; - } - } - overrides(overrideId) { - if (overrideId === undefined) { - return this._overrides; - } else { - if (this.individualOverrides[overrideId] === undefined) { - this.individualOverrides[overrideId] = new Override( - this.name, - overrideId, - this.apiCall - ); - } - return this.individualOverrides[overrideId]; - } - } - synonyms(synonymId) { - if (synonymId === undefined) { - return this._synonyms; - } else { - if (this.individualSynonyms[synonymId] === undefined) { - this.individualSynonyms[synonymId] = new Synonym( - this.name, - synonymId, - this.apiCall - ); - } - return this.individualSynonyms[synonymId]; - } - } - endpointPath() { - return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`; - } -}; - -// src/Typesense/Aliases.ts -var RESOURCEPATH6 = "/aliases"; -var Aliases = class _Aliases { - constructor(apiCall) { - this.apiCall = apiCall; - } - async upsert(name, mapping) { - return this.apiCall.put( - this.endpointPath(name), - mapping - ); - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH6); - } - endpointPath(aliasName) { - return `${_Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH6; - } -}; - -// src/Typesense/Alias.ts -var Alias = class { - constructor(name, apiCall) { - this.name = name; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`; - } -}; - -// src/Typesense/Keys.ts -var import_crypto = __toESM(require_crypto()); -var RESOURCEPATH7 = "/keys"; -var Keys = class _Keys { - constructor(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - async create(params) { - return this.apiCall.post(_Keys.RESOURCEPATH, params); - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH7); - } - generateScopedSearchKey(searchKey, parameters) { - const normalizedParams = normalizeArrayableParams(parameters); - const paramsJSON = JSON.stringify(normalizedParams); - const digest = Buffer.from( - (0, import_crypto.createHmac)("sha256", searchKey).update(paramsJSON).digest("base64") - ); - const keyPrefix = searchKey.substr(0, 4); - const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`; - return Buffer.from(rawScopedKey).toString("base64"); - } - static get RESOURCEPATH() { - return RESOURCEPATH7; - } -}; - -// src/Typesense/Key.ts -var Key = class { - constructor(id, apiCall) { - this.id = id; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`; - } -}; - -// src/Typesense/Debug.ts -var RESOURCEPATH8 = "/debug"; -var Debug = class { - constructor(apiCall) { - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH8); - } -}; - -// src/Typesense/Metrics.ts -var RESOURCEPATH9 = "/metrics.json"; -var Metrics = class { - constructor(apiCall) { - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH9); - } -}; - -// src/Typesense/Stats.ts -var RESOURCEPATH10 = "/stats.json"; -var Metrics2 = class { - constructor(apiCall) { - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH10); - } -}; - -// src/Typesense/Health.ts -var RESOURCEPATH11 = "/health"; -var Health = class { - constructor(apiCall) { - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH11); - } -}; - -// src/Typesense/Operations.ts -var RESOURCEPATH12 = "/operations"; -var Operations = class { - constructor(apiCall) { - this.apiCall = apiCall; - } - async perform(operationName, queryParameters = {}) { - return this.apiCall.post( - `${RESOURCEPATH12}/${operationName}`, - {}, - queryParameters - ); - } -}; - -// src/Typesense/Presets.ts -var RESOURCEPATH13 = "/presets"; -var Presets = class _Presets { - constructor(apiCall) { - this.apiCall = apiCall; - } - async upsert(presetId, params) { - if (typeof params.value === "object" && "searches" in params.value) { - const normalizedParams2 = params.value.searches.map( - (search) => normalizeArrayableParams(search) - ); - return this.apiCall.put(this.endpointPath(presetId), { - value: { searches: normalizedParams2 } - }); - } - const normalizedParams = normalizeArrayableParams(params.value); - return this.apiCall.put(this.endpointPath(presetId), { - value: normalizedParams - }); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - endpointPath(operation) { - return `${_Presets.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH13; - } -}; - -// src/Typesense/Preset.ts -var Preset = class { - constructor(presetId, apiCall) { - this.presetId = presetId; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`; - } -}; - -// src/Typesense/AnalyticsRules.ts -var RESOURCEPATH14 = "/analytics/rules"; -var AnalyticsRules = class _AnalyticsRules { - constructor(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - async upsert(name, params) { - return this.apiCall.put( - this.endpointPath(name), - params - ); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - endpointPath(operation) { - return `${_AnalyticsRules.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH14; - } -}; - -// src/Typesense/AnalyticsRule.ts -var AnalyticsRule = class { - constructor(name, apiCall) { - this.name = name; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`; - } -}; - -// src/Typesense/AnalyticsEvents.ts -var RESOURCEPATH15 = "/analytics/events"; -var AnalyticsEvents = class _AnalyticsEvents { - constructor(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - async create(params) { - return this.apiCall.post( - this.endpointPath(), - params - ); - } - endpointPath(operation) { - return `${_AnalyticsEvents.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH15; - } -}; - -// src/Typesense/Analytics.ts -var RESOURCEPATH16 = "/analytics"; -var Analytics = class { - constructor(apiCall) { - this.apiCall = apiCall; - this.individualAnalyticsRules = {}; - this.apiCall = apiCall; - this._analyticsRules = new AnalyticsRules(this.apiCall); - this._analyticsEvents = new AnalyticsEvents(this.apiCall); - } - rules(id) { - if (id === undefined) { - return this._analyticsRules; - } else { - if (this.individualAnalyticsRules[id] === undefined) { - this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall); - } - return this.individualAnalyticsRules[id]; - } - } - events() { - return this._analyticsEvents; - } - static get RESOURCEPATH() { - return RESOURCEPATH16; - } -}; - -// src/Typesense/Stopwords.ts -var RESOURCEPATH17 = "/stopwords"; -var Stopwords = class _Stopwords { - constructor(apiCall) { - this.apiCall = apiCall; - } - async upsert(stopwordId, params) { - return this.apiCall.put( - this.endpointPath(stopwordId), - params - ); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - endpointPath(operation) { - return `${_Stopwords.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH17; - } -}; - -// src/Typesense/Stopword.ts -var Stopword = class { - constructor(stopwordId, apiCall) { - this.stopwordId = stopwordId; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`; - } -}; - -// src/Typesense/ConversationModels.ts -var RESOURCEPATH18 = "/conversations/models"; -var ConversationModels = class _ConversationModels { - constructor(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - async create(params) { - return this.apiCall.post( - this.endpointPath(), - params - ); - } - async retrieve() { - return this.apiCall.get( - this.endpointPath() - ); - } - endpointPath(operation) { - return `${_ConversationModels.RESOURCEPATH}${operation === undefined ? "" : "/" + encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH18; - } -}; - -// src/Typesense/ConversationModel.ts -var ConversationModel = class { - constructor(id, apiCall) { - this.id = id; - this.apiCall = apiCall; - } - async update(params) { - return this.apiCall.put( - this.endpointPath(), - params - ); - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async delete() { - return this.apiCall.delete( - this.endpointPath() - ); - } - endpointPath() { - return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`; - } -}; - -// src/Typesense/Conversations.ts -var RESOURCEPATH19 = "/conversations"; -var Conversations = class { - constructor(apiCall) { - this.apiCall = apiCall; - this.individualConversationModels = {}; - this.apiCall = apiCall; - this._conversationsModels = new ConversationModels(this.apiCall); - } - async retrieve() { - return this.apiCall.get(RESOURCEPATH19); - } - models(id) { - if (id === undefined) { - return this._conversationsModels; - } else { - if (this.individualConversationModels[id] === undefined) { - this.individualConversationModels[id] = new ConversationModel( - id, - this.apiCall - ); - } - return this.individualConversationModels[id]; - } - } - static get RESOURCEPATH() { - return RESOURCEPATH19; - } -}; - -// src/Typesense/Conversation.ts -var Conversation = class { - constructor(id, apiCall) { - this.id = id; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - async update(params) { - return this.apiCall.put( - this.endpointPath(), - params - ); - } - async delete() { - return this.apiCall.delete(this.endpointPath()); - } - endpointPath() { - return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`; - } -}; - -// src/Typesense/StemmingDictionaries.ts -var RESOURCEPATH20 = "/stemming/dictionaries"; -var StemmingDictionaries = class _StemmingDictionaries { - constructor(apiCall) { - this.apiCall = apiCall; - this.apiCall = apiCall; - } - async upsert(id, wordRootCombinations) { - const wordRootCombinationsInJSONLFormat = Array.isArray( - wordRootCombinations - ) ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join("\n") : wordRootCombinations; - const resultsInJSONLFormat = await this.apiCall.performRequest( - "post", - this.endpointPath("import"), - { - queryParameters: { id }, - bodyParameters: wordRootCombinationsInJSONLFormat, - additionalHeaders: { "Content-Type": "text/plain" }, - skipConnectionTimeout: true - } - ); - return Array.isArray(wordRootCombinations) ? resultsInJSONLFormat.split("\n").map((line) => JSON.parse(line)) : resultsInJSONLFormat; - } - async retrieve() { - return this.apiCall.get( - this.endpointPath() - ); - } - endpointPath(operation) { - return operation === undefined ? `${_StemmingDictionaries.RESOURCEPATH}` : `${_StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`; - } - static get RESOURCEPATH() { - return RESOURCEPATH20; - } -}; - -// src/Typesense/StemmingDictionary.ts -var StemmingDictionary = class { - constructor(id, apiCall) { - this.id = id; - this.apiCall = apiCall; - } - async retrieve() { - return this.apiCall.get(this.endpointPath()); - } - endpointPath() { - return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`; - } -}; - -// src/Typesense/Stemming.ts -var RESOURCEPATH21 = "/stemming"; -var Stemming = class { - constructor(apiCall) { - this.apiCall = apiCall; - this.individualStemmingDictionaries = {}; - this.apiCall = apiCall; - this._stemmingDictionaries = new StemmingDictionaries(this.apiCall); - } - dictionaries(id) { - if (id === undefined) { - return this._stemmingDictionaries; - } else { - if (this.individualStemmingDictionaries[id] === undefined) { - this.individualStemmingDictionaries[id] = new StemmingDictionary( - id, - this.apiCall - ); - } - return this.individualStemmingDictionaries[id]; - } - } - static get RESOURCEPATH() { - return RESOURCEPATH21; - } -}; - -// src/Typesense/Client.ts -var Client = class { - constructor(options) { - options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false; - this.configuration = new Configuration(options); - this.apiCall = new ApiCall(this.configuration); - this.debug = new Debug(this.apiCall); - this.metrics = new Metrics(this.apiCall); - this.stats = new Metrics2(this.apiCall); - this.health = new Health(this.apiCall); - this.operations = new Operations(this.apiCall); - this.multiSearch = new MultiSearch(this.apiCall, this.configuration); - this._collections = new Collections(this.apiCall); - this.individualCollections = {}; - this._aliases = new Aliases(this.apiCall); - this.individualAliases = {}; - this._keys = new Keys(this.apiCall); - this.individualKeys = {}; - this._presets = new Presets(this.apiCall); - this.individualPresets = {}; - this._stopwords = new Stopwords(this.apiCall); - this.individualStopwords = {}; - this.analytics = new Analytics(this.apiCall); - this.stemming = new Stemming(this.apiCall); - this._conversations = new Conversations(this.apiCall); - this.individualConversations = {}; - } - collections(collectionName) { - if (collectionName === undefined) { - return this._collections; - } else { - if (this.individualCollections[collectionName] === undefined) { - this.individualCollections[collectionName] = new Collection( - collectionName, - this.apiCall, - this.configuration - ); - } - return this.individualCollections[collectionName]; - } - } - aliases(aliasName) { - if (aliasName === undefined) { - return this._aliases; - } else { - if (this.individualAliases[aliasName] === undefined) { - this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall); - } - return this.individualAliases[aliasName]; - } - } - keys(id) { - if (id === undefined) { - return this._keys; - } else { - if (this.individualKeys[id] === undefined) { - this.individualKeys[id] = new Key(id, this.apiCall); - } - return this.individualKeys[id]; - } - } - presets(id) { - if (id === undefined) { - return this._presets; - } else { - if (this.individualPresets[id] === undefined) { - this.individualPresets[id] = new Preset(id, this.apiCall); - } - return this.individualPresets[id]; - } - } - stopwords(id) { - if (id === undefined) { - return this._stopwords; - } else { - if (this.individualStopwords[id] === undefined) { - this.individualStopwords[id] = new Stopword(id, this.apiCall); - } - return this.individualStopwords[id]; - } - } - conversations(id) { - if (id === undefined) { - return this._conversations; - } else { - if (this.individualConversations[id] === undefined) { - this.individualConversations[id] = new Conversation(id, this.apiCall); - } - return this.individualConversations[id]; - } - } -}; - -export { Client, Errors_exports as Errors, SearchClient }; -//# sourceMappingURL=typesense.min.mjs.map -//# sourceMappingURL=typesense.min.mjs.map \ No newline at end of file diff --git a/dist/typesense.min.mjs.map b/dist/typesense.min.mjs.map deleted file mode 100644 index 436b291a..00000000 --- a/dist/typesense.min.mjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["node-modules-polyfills-empty:http","node-modules-polyfills-empty:https","node-modules-polyfills-empty:crypto","../src/Typesense/Errors/index.ts","../src/Typesense/Errors/TypesenseError.ts","../src/Typesense/Errors/HTTPError.ts","../src/Typesense/Errors/MissingConfigurationError.ts","../src/Typesense/Errors/ObjectAlreadyExists.ts","../src/Typesense/Errors/ObjectNotFound.ts","../src/Typesense/Errors/ObjectUnprocessable.ts","../src/Typesense/Errors/RequestMalformed.ts","../src/Typesense/Errors/RequestUnauthorized.ts","../src/Typesense/Errors/ServerError.ts","../src/Typesense/Errors/ImportError.ts","../src/Typesense/Configuration.ts","../src/Typesense/ApiCall.ts","../src/Typesense/RequestWithCache.ts","../src/Typesense/Collections.ts","../src/Typesense/SearchOnlyDocuments.ts","../src/Typesense/Documents.ts","../src/Typesense/Utils.ts","../src/Typesense/MultiSearch.ts","../src/Typesense/SearchOnlyCollection.ts","../src/Typesense/SearchClient.ts","../src/Typesense/Overrides.ts","../src/Typesense/Override.ts","../src/Typesense/Synonyms.ts","../src/Typesense/Synonym.ts","../src/Typesense/Document.ts","../src/Typesense/Collection.ts","../src/Typesense/Aliases.ts","../src/Typesense/Alias.ts","../src/Typesense/Keys.ts","../src/Typesense/Key.ts","../src/Typesense/Debug.ts","../src/Typesense/Metrics.ts","../src/Typesense/Stats.ts","../src/Typesense/Health.ts","../src/Typesense/Operations.ts","../src/Typesense/Presets.ts","../src/Typesense/Preset.ts","../src/Typesense/AnalyticsRules.ts","../src/Typesense/AnalyticsRule.ts","../src/Typesense/AnalyticsEvents.ts","../src/Typesense/Analytics.ts","../src/Typesense/Stopwords.ts","../src/Typesense/Stopword.ts","../src/Typesense/ConversationModels.ts","../src/Typesense/ConversationModel.ts","../src/Typesense/Conversations.ts","../src/Typesense/Conversation.ts","../src/Typesense/StemmingDictionaries.ts","../src/Typesense/StemmingDictionary.ts","../src/Typesense/Stemming.ts","../src/Typesense/Client.ts"],"names":["HTTPAgent","HTTPSAgent","RESOURCEPATH","isNodeJSEnvironment","Metrics","normalizedParams"],"mappings":"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","file":"typesense.min.mjs","sourcesContent":["module.exports = {}","module.exports = {}","module.exports = {}","import HTTPError from \"./HTTPError\";\nimport MissingConfigurationError from \"./MissingConfigurationError\";\nimport ObjectAlreadyExists from \"./ObjectAlreadyExists\";\nimport ObjectNotFound from \"./ObjectNotFound\";\nimport ObjectUnprocessable from \"./ObjectUnprocessable\";\nimport RequestMalformed from \"./RequestMalformed\";\nimport RequestUnauthorized from \"./RequestUnauthorized\";\nimport ServerError from \"./ServerError\";\nimport ImportError from \"./ImportError\";\nimport TypesenseError from \"./TypesenseError\";\n\nexport {\n HTTPError,\n MissingConfigurationError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n TypesenseError,\n ImportError,\n};\n","export default class TypesenseError extends Error {\n httpStatus?: number;\n httpBody?: string;\n\n // Source: https://stackoverflow.com/a/58417721/123545\n constructor(message?: string, httpBody?: string, httpStatus?: number) {\n super(message);\n this.name = new.target.name;\n this.httpBody = httpBody;\n this.httpStatus = httpStatus;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class HTTPError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class MissingConfigurationError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectAlreadyExists extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectNotFound extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ObjectUnprocessable extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestMalformed extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class RequestUnauthorized extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\n\nexport default class ServerError extends TypesenseError {}\n","import TypesenseError from \"./TypesenseError\";\nimport type { DocumentImportParameters, ImportResponse } from \"../Documents\";\nimport { ReadStream } from \"node:fs\";\n\ninterface ImportErrorPayload {\n documentsInJSONLFormat: string | ReadStream;\n options: DocumentImportParameters;\n failedItems: ImportResponse[];\n successCount: number;\n}\n\nexport default class ImportError extends TypesenseError {\n payload: ImportErrorPayload;\n importResults: ImportResponse[];\n constructor(\n message: string,\n importResults: ImportResponse[],\n payload: ImportErrorPayload,\n ) {\n super(message);\n this.importResults = importResults;\n this.payload = payload;\n }\n}\n","import logger from \"loglevel\";\nimport { MissingConfigurationError } from \"./Errors\";\nimport type { Agent as HTTPAgent } from \"http\";\nimport type { Agent as HTTPSAgent } from \"https\";\nimport type { AxiosRequestConfig } from \"axios\";\n\nexport interface NodeConfiguration {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n url?: string;\n}\n\nexport interface NodeConfigurationWithHostname {\n host: string;\n port: number;\n protocol: string;\n path?: string;\n}\n\nexport interface NodeConfigurationWithUrl {\n url: string;\n}\n\nexport interface ConfigurationOptions {\n apiKey: string;\n nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n randomizeNodes?: boolean;\n /**\n * @deprecated\n * masterNode is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n masterNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n /**\n * @deprecated\n * readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12'\n */\n readReplicaNodes?:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n connectionTimeoutSeconds?: number;\n timeoutSeconds?: number;\n healthcheckIntervalSeconds?: number;\n numRetries?: number;\n retryIntervalSeconds?: number;\n sendApiKeyAsQueryParam?: boolean | undefined;\n useServerSideSearchCache?: boolean;\n cacheSearchResultsForSeconds?: number;\n additionalHeaders?: Record;\n\n logLevel?: logger.LogLevelDesc;\n logger?: logger.Logger;\n\n /**\n * Set a custom HTTP Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPAgent } = require(\"http\");\n * ...\n * httpAgent: new HTTPAgent({ keepAlive: true }),\n * @type {HTTPAgent}\n */\n httpAgent?: HTTPAgent;\n\n /**\n * Set a custom HTTPS Agent\n *\n * This is helpful for eg, to enable keepAlive which helps prevents ECONNRESET socket hang up errors\n * Usage:\n * const { Agent: HTTPSAgent } = require(\"https\");\n * ...\n * httpsAgent: new HTTPSAgent({ keepAlive: true }),\n * @type {HTTPSAgent}\n */\n httpsAgent?: HTTPSAgent;\n\n /**\n * Set a custom paramsSerializer\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n * This is helpful for handling React Native issues like this: https://github.com/axios/axios/issues/6102#issuecomment-2085301397\n * @type {any}\n */\n paramsSerializer?: any;\n\n /**\n * Set a custom axios adapter\n *\n * Useful for customizing the underlying HTTP client library used by Typesense.\n *\n * For example, you can use this to use a custom HTTP client library like `fetch`, in order for the library to work on the edge.\n * Related GiHub issue: https://github.com/typesense/typesense-js/issues/161\n *\n * See axios documentation for more information on how to use this parameter: https://axios-http.com/docs/req_config\n */\n axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n}\n\nexport default class Configuration {\n readonly nodes:\n | NodeConfiguration[]\n | NodeConfigurationWithHostname[]\n | NodeConfigurationWithUrl[];\n readonly nearestNode?:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl;\n readonly connectionTimeoutSeconds: number;\n readonly healthcheckIntervalSeconds: number;\n readonly numRetries: number;\n readonly retryIntervalSeconds: number;\n readonly apiKey: string;\n readonly sendApiKeyAsQueryParam?: boolean;\n readonly cacheSearchResultsForSeconds: number;\n readonly useServerSideSearchCache: boolean;\n readonly logger: logger.Logger;\n readonly logLevel: logger.LogLevelDesc;\n readonly additionalHeaders?: Record;\n readonly httpAgent?: HTTPAgent;\n readonly httpsAgent?: HTTPSAgent;\n readonly paramsSerializer?: any;\n readonly axiosAdapter?: AxiosRequestConfig[\"adapter\"];\n\n constructor(options: ConfigurationOptions) {\n this.nodes = options.nodes || [];\n this.nodes = this.nodes\n .map((node) => this.setDefaultPathInNode(node))\n .map((node) => this.setDefaultPortInNode(node))\n .map((node) => ({ ...node })) as NodeConfiguration[]; // Make a deep copy\n\n if (options.randomizeNodes == null) {\n options.randomizeNodes = true;\n }\n\n if (options.randomizeNodes === true) {\n this.shuffleArray(this.nodes);\n }\n\n this.nearestNode = options.nearestNode;\n this.nearestNode = this.setDefaultPathInNode(this.nearestNode);\n this.nearestNode = this.setDefaultPortInNode(this.nearestNode);\n\n this.connectionTimeoutSeconds =\n options.connectionTimeoutSeconds || options.timeoutSeconds || 5;\n this.healthcheckIntervalSeconds = options.healthcheckIntervalSeconds || 60;\n this.numRetries =\n (options.numRetries !== undefined && options.numRetries >= 0\n ? options.numRetries\n : this.nodes.length + (this.nearestNode == null ? 0 : 1)) || 3;\n this.retryIntervalSeconds = options.retryIntervalSeconds || 0.1;\n\n this.apiKey = options.apiKey;\n this.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam; // We will set a default for this in Client and SearchClient\n\n this.cacheSearchResultsForSeconds =\n options.cacheSearchResultsForSeconds || 0; // Disable client-side cache by default\n this.useServerSideSearchCache = options.useServerSideSearchCache || false;\n\n this.axiosAdapter = options.axiosAdapter;\n this.logger = options.logger || logger;\n this.logLevel = options.logLevel || \"warn\";\n this.logger.setLevel(this.logLevel);\n\n this.additionalHeaders = options.additionalHeaders;\n\n this.httpAgent = options.httpAgent;\n this.httpsAgent = options.httpsAgent;\n\n this.paramsSerializer = options.paramsSerializer;\n\n this.showDeprecationWarnings(options);\n this.validate();\n }\n\n validate(): boolean {\n if (this.nodes == null || this.nodes.length === 0 || this.validateNodes()) {\n throw new MissingConfigurationError(\n \"Ensure that nodes[].protocol, nodes[].host and nodes[].port are set\",\n );\n }\n\n if (\n this.nearestNode != null &&\n this.isNodeMissingAnyParameters(this.nearestNode)\n ) {\n throw new MissingConfigurationError(\n \"Ensure that nearestNodes.protocol, nearestNodes.host and nearestNodes.port are set\",\n );\n }\n\n if (this.apiKey == null) {\n throw new MissingConfigurationError(\"Ensure that apiKey is set\");\n }\n\n return true;\n }\n\n private validateNodes(): boolean {\n return this.nodes.some((node) => {\n return this.isNodeMissingAnyParameters(node);\n });\n }\n\n private isNodeMissingAnyParameters(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl,\n ): boolean {\n return (\n ![\"protocol\", \"host\", \"port\", \"path\"].every((key) => {\n return node.hasOwnProperty(key);\n }) && node[\"url\"] == null\n );\n }\n\n private setDefaultPathInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (node != null && !node.hasOwnProperty(\"path\")) {\n node[\"path\"] = \"\";\n }\n return node;\n }\n\n private setDefaultPortInNode(\n node:\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined,\n ):\n | NodeConfiguration\n | NodeConfigurationWithHostname\n | NodeConfigurationWithUrl\n | undefined {\n if (\n node != null &&\n !node.hasOwnProperty(\"port\") &&\n node.hasOwnProperty(\"protocol\")\n ) {\n switch (node[\"protocol\"]) {\n case \"https\":\n node[\"port\"] = 443;\n break;\n case \"http\":\n node[\"port\"] = 80;\n break;\n }\n }\n return node;\n }\n\n private showDeprecationWarnings(options: ConfigurationOptions): void {\n if (options.timeoutSeconds) {\n this.logger.warn(\n \"Deprecation warning: timeoutSeconds is now renamed to connectionTimeoutSeconds\",\n );\n }\n if (options.masterNode) {\n this.logger.warn(\n \"Deprecation warning: masterNode is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n if (options.readReplicaNodes) {\n this.logger.warn(\n \"Deprecation warning: readReplicaNodes is now consolidated to nodes, starting with Typesense Server v0.12\",\n );\n }\n }\n\n private shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n}\n","import type {\n AxiosAdapter,\n AxiosRequestConfig,\n AxiosResponse,\n Method,\n} from \"axios\";\nimport axios from \"axios\";\nimport { Agent as HTTPAgent } from \"http\";\nimport { Agent as HTTPSAgent } from \"https\";\nimport { Logger } from \"loglevel\";\nimport Configuration, { NodeConfiguration } from \"./Configuration\";\nimport {\n HTTPError,\n ObjectAlreadyExists,\n ObjectNotFound,\n ObjectUnprocessable,\n RequestMalformed,\n RequestUnauthorized,\n ServerError,\n} from \"./Errors\";\nimport TypesenseError from \"./Errors/TypesenseError\";\n\nconst APIKEYHEADERNAME = \"X-TYPESENSE-API-KEY\";\nconst HEALTHY = true;\nconst UNHEALTHY = false;\n\ninterface Node extends NodeConfiguration {\n isHealthy: boolean;\n index: string | number;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class ApiCall {\n private readonly apiKey: string;\n private readonly nodes: Node[];\n private readonly nearestNode: Node;\n private readonly connectionTimeoutSeconds: number;\n private readonly healthcheckIntervalSeconds: number;\n private readonly retryIntervalSeconds: number;\n private readonly sendApiKeyAsQueryParam?: boolean;\n private readonly numRetriesPerRequest: number;\n private readonly additionalUserHeaders?: Record;\n\n private readonly logger: Logger;\n private currentNodeIndex: number;\n\n constructor(private configuration: Configuration) {\n this.apiKey = this.configuration.apiKey;\n this.nodes =\n this.configuration.nodes == null\n ? this.configuration.nodes\n : JSON.parse(JSON.stringify(this.configuration.nodes)); // Make a copy, since we'll be adding additional metadata to the nodes\n this.nearestNode =\n this.configuration.nearestNode == null\n ? this.configuration.nearestNode\n : JSON.parse(JSON.stringify(this.configuration.nearestNode));\n this.connectionTimeoutSeconds = this.configuration.connectionTimeoutSeconds;\n this.healthcheckIntervalSeconds =\n this.configuration.healthcheckIntervalSeconds;\n this.numRetriesPerRequest = this.configuration.numRetries;\n this.retryIntervalSeconds = this.configuration.retryIntervalSeconds;\n this.sendApiKeyAsQueryParam = this.configuration.sendApiKeyAsQueryParam;\n this.additionalUserHeaders = this.configuration.additionalHeaders;\n\n this.logger = this.configuration.logger;\n\n this.initializeMetadataForNodes();\n this.currentNodeIndex = -1;\n }\n\n async get(\n endpoint: string,\n queryParameters: any = {},\n {\n abortSignal = null,\n responseType = undefined,\n }: {\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n } = {},\n ): Promise {\n return this.performRequest(\"get\", endpoint, {\n queryParameters,\n abortSignal,\n responseType,\n });\n }\n\n async delete(endpoint: string, queryParameters: any = {}): Promise {\n return this.performRequest(\"delete\", endpoint, { queryParameters });\n }\n\n async post(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n additionalHeaders: any = {},\n ): Promise {\n return this.performRequest(\"post\", endpoint, {\n queryParameters,\n bodyParameters,\n additionalHeaders,\n });\n }\n\n async put(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"put\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n async patch(\n endpoint: string,\n bodyParameters: any = {},\n queryParameters: any = {},\n ): Promise {\n return this.performRequest(\"patch\", endpoint, {\n queryParameters,\n bodyParameters,\n });\n }\n\n private getAdapter(): AxiosAdapter | undefined {\n if (!this.configuration.axiosAdapter) return undefined;\n\n if (typeof this.configuration.axiosAdapter === \"function\")\n return this.configuration.axiosAdapter;\n\n const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent === \"Cloudflare-Workers\";\n\n return isCloudflareWorkers\n ? axios.getAdapter(this.configuration.axiosAdapter).bind(globalThis)\n : axios.getAdapter(this.configuration.axiosAdapter);\n }\n\n async performRequest(\n requestType: Method,\n endpoint: string,\n {\n queryParameters = null,\n bodyParameters = null,\n additionalHeaders = {},\n abortSignal = null,\n responseType = undefined,\n skipConnectionTimeout = false,\n enableKeepAlive = undefined,\n }: {\n queryParameters?: any;\n bodyParameters?: any;\n additionalHeaders?: any;\n abortSignal?: any;\n responseType?: AxiosRequestConfig[\"responseType\"] | undefined;\n skipConnectionTimeout?: boolean;\n enableKeepAlive?: boolean | undefined;\n },\n ): Promise {\n this.configuration.validate();\n\n const requestNumber = Date.now();\n let lastException;\n let wasAborted = false;\n this.logger.debug(\n `Request #${requestNumber}: Performing ${requestType.toUpperCase()} request: ${endpoint}`,\n );\n for (\n let numTries = 1;\n numTries <= this.numRetriesPerRequest + 1;\n numTries++\n ) {\n const node = this.getNextNode(requestNumber);\n this.logger.debug(\n `Request #${requestNumber}: Attempting ${requestType.toUpperCase()} request Try #${numTries} to Node ${\n node.index\n }`,\n );\n\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n\n let abortListener: ((event: Event) => void) | undefined;\n\n try {\n const requestOptions: AxiosRequestConfig = {\n adapter: this.getAdapter(),\n method: requestType,\n url: this.uriFor(endpoint, node),\n headers: Object.assign(\n {},\n this.defaultHeaders(),\n additionalHeaders,\n this.additionalUserHeaders,\n ),\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n responseType,\n validateStatus: (status) => {\n /* Override default validateStatus, which only considers 2xx a success.\n In our case, if the server returns any HTTP code, we will handle it below.\n We do this to be able to raise custom errors based on response code.\n */\n return status > 0;\n },\n transformResponse: [\n (data, headers) => {\n let transformedData = data;\n if (\n headers !== undefined &&\n typeof data === \"string\" &&\n headers[\"content-type\"] &&\n headers[\"content-type\"].startsWith(\"application/json\")\n ) {\n transformedData = JSON.parse(data);\n }\n return transformedData;\n },\n ],\n };\n\n if (skipConnectionTimeout !== true) {\n requestOptions.timeout = this.connectionTimeoutSeconds * 1000;\n }\n\n if (queryParameters && Object.keys(queryParameters).length !== 0) {\n requestOptions.params = queryParameters;\n }\n\n if (this.sendApiKeyAsQueryParam) {\n requestOptions.params = requestOptions.params || {};\n requestOptions.params[\"x-typesense-api-key\"] = this.apiKey;\n }\n\n if (this.configuration.httpAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpAgent`,\n );\n requestOptions.httpAgent = this.configuration.httpAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling KeepAlive`);\n requestOptions.httpAgent = new HTTPAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.httpsAgent) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom httpsAgent`,\n );\n requestOptions.httpsAgent = this.configuration.httpsAgent;\n } else if (enableKeepAlive === true) {\n if (!isNodeJSEnvironment) {\n this.logger.warn(\n `Request #${requestNumber}: Cannot use custom httpAgent in a browser environment to enable keepAlive`,\n );\n } else {\n this.logger.debug(`Request #${requestNumber}: Enabling keepAlive`);\n requestOptions.httpsAgent = new HTTPSAgent({ keepAlive: true });\n }\n }\n\n if (this.configuration.paramsSerializer) {\n this.logger.debug(\n `Request #${requestNumber}: Using custom paramsSerializer`,\n );\n requestOptions.paramsSerializer = this.configuration.paramsSerializer;\n }\n\n if (\n bodyParameters &&\n ((typeof bodyParameters === \"string\" &&\n bodyParameters.length !== 0) ||\n (typeof bodyParameters === \"object\" &&\n Object.keys(bodyParameters).length !== 0))\n ) {\n requestOptions.data = bodyParameters;\n }\n\n // Translate from user-provided AbortController to the Axios request cancel mechanism.\n if (abortSignal) {\n const cancelToken = axios.CancelToken;\n const source = cancelToken.source();\n abortListener = () => {\n wasAborted = true;\n source.cancel();\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n requestOptions.cancelToken = source.token;\n }\n\n const response = await axios(requestOptions);\n if (response.status >= 1 && response.status <= 499) {\n // Treat any status code > 0 and < 500 to be an indication that node is healthy\n // We exclude 0 since some clients return 0 when request fails\n this.setNodeHealthcheck(node, HEALTHY);\n }\n this.logger.debug(\n `Request #${requestNumber}: Request to Node ${node.index} was made. Response Code was ${response.status}.`,\n );\n\n if (response.status >= 200 && response.status < 300) {\n // If response is 2xx return a resolved promise\n return Promise.resolve(response.data);\n } else if (response.status < 500) {\n // Next, if response is anything but 5xx, don't retry, return a custom error\n return Promise.reject(\n this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n ),\n );\n } else {\n // Retry all other HTTP errors (HTTPStatus > 500)\n // This will get caught by the catch block below\n throw this.customErrorForResponse(\n response,\n response.data?.message,\n requestOptions.data,\n );\n }\n } catch (error: any) {\n // This block handles retries for HTTPStatus > 500 and network layer issues like connection timeouts\n if (!wasAborted) {\n this.setNodeHealthcheck(node, UNHEALTHY);\n }\n lastException = error;\n this.logger.warn(\n `Request #${requestNumber}: Request to Node ${\n node.index\n } failed due to \"${error?.code ?? \"\"} ${error.message}${\n error.response == null\n ? \"\"\n : \" - \" + JSON.stringify(error.response?.data)\n }\"`,\n );\n // this.logger.debug(error.stack)\n if (wasAborted) {\n return Promise.reject(new Error(\"Request aborted by caller.\"));\n }\n if (numTries < this.numRetriesPerRequest + 1) {\n this.logger.warn(\n `Request #${requestNumber}: Sleeping for ${this.retryIntervalSeconds}s and then retrying request...`,\n );\n }\n await this.timer(this.retryIntervalSeconds);\n } finally {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n }\n this.logger.debug(\n `Request #${requestNumber}: No retries left. Raising last error`,\n );\n return Promise.reject(lastException);\n }\n\n // Attempts to find the next healthy node, looping through the list of nodes once.\n // But if no healthy nodes are found, it will just return the next node, even if it's unhealthy\n // so we can try the request for good measure, in case that node has become healthy since\n getNextNode(requestNumber = 0): Node {\n // Check if nearestNode is set and is healthy, if so return it\n if (this.nearestNode != null) {\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: Node ${\n this.nearestNode.index\n } is ${this.nearestNode.isHealthy === true ? \"Healthy\" : \"Unhealthy\"}`,\n );\n if (\n this.nearestNode.isHealthy === true ||\n this.nodeDueForHealthcheck(this.nearestNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${this.nearestNode.index}`,\n );\n return this.nearestNode;\n }\n this.logger.debug(\n `Request #${requestNumber}: Falling back to individual nodes`,\n );\n }\n\n // Fallback to nodes as usual\n this.logger.debug(\n `Request #${requestNumber}: Nodes Health: ${this.nodes\n .map(\n (node) =>\n `Node ${node.index} is ${\n node.isHealthy === true ? \"Healthy\" : \"Unhealthy\"\n }`,\n )\n .join(\" || \")}`,\n );\n let candidateNode: Node = this.nodes[0];\n for (let i = 0; i <= this.nodes.length; i++) {\n this.currentNodeIndex = (this.currentNodeIndex + 1) % this.nodes.length;\n candidateNode = this.nodes[this.currentNodeIndex];\n if (\n candidateNode.isHealthy === true ||\n this.nodeDueForHealthcheck(candidateNode, requestNumber)\n ) {\n this.logger.debug(\n `Request #${requestNumber}: Updated current node to Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n }\n\n // None of the nodes are marked healthy, but some of them could have become healthy since last health check.\n // So we will just return the next node.\n this.logger.debug(\n `Request #${requestNumber}: No healthy nodes were found. Returning the next node, Node ${candidateNode.index}`,\n );\n return candidateNode;\n }\n\n nodeDueForHealthcheck(node, requestNumber = 0): boolean {\n const isDueForHealthcheck =\n Date.now() - node.lastAccessTimestamp >\n this.healthcheckIntervalSeconds * 1000;\n if (isDueForHealthcheck) {\n this.logger.debug(\n `Request #${requestNumber}: Node ${node.index} has exceeded healtcheckIntervalSeconds of ${this.healthcheckIntervalSeconds}. Adding it back into rotation.`,\n );\n }\n return isDueForHealthcheck;\n }\n\n initializeMetadataForNodes(): void {\n if (this.nearestNode != null) {\n this.nearestNode.index = \"nearestNode\";\n this.setNodeHealthcheck(this.nearestNode, HEALTHY);\n }\n\n this.nodes.forEach((node, i) => {\n node.index = i;\n this.setNodeHealthcheck(node, HEALTHY);\n });\n }\n\n setNodeHealthcheck(node, isHealthy): void {\n node.isHealthy = isHealthy;\n node.lastAccessTimestamp = Date.now();\n }\n\n uriFor(endpoint: string, node): string {\n if (node.url != null) {\n return `${node.url}${endpoint}`;\n }\n return `${node.protocol}://${node.host}:${node.port}${node.path}${endpoint}`;\n }\n\n defaultHeaders(): any {\n const defaultHeaders = {};\n if (!this.sendApiKeyAsQueryParam) {\n defaultHeaders[APIKEYHEADERNAME] = this.apiKey;\n }\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n return defaultHeaders;\n }\n\n async timer(seconds): Promise {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n customErrorForResponse(\n response: AxiosResponse,\n messageFromServer: string,\n httpBody?: string,\n ): TypesenseError {\n let errorMessage = `Request failed with HTTP code ${response.status}`;\n if (\n typeof messageFromServer === \"string\" &&\n messageFromServer.trim() !== \"\"\n ) {\n errorMessage += ` | Server said: ${messageFromServer}`;\n }\n\n let error = new TypesenseError(errorMessage, httpBody, response.status);\n\n if (response.status === 400) {\n error = new RequestMalformed(errorMessage);\n } else if (response.status === 401) {\n error = new RequestUnauthorized(errorMessage);\n } else if (response.status === 404) {\n error = new ObjectNotFound(errorMessage);\n } else if (response.status === 409) {\n error = new ObjectAlreadyExists(errorMessage);\n } else if (response.status === 422) {\n error = new ObjectUnprocessable(errorMessage);\n } else if (response.status >= 500 && response.status <= 599) {\n error = new ServerError(errorMessage);\n } else {\n error = new HTTPError(errorMessage);\n }\n\n return error;\n }\n}\n","const defaultCacheResponseForSeconds = 2 * 60;\nconst defaultMaxSize = 100;\n\nexport default class RequestWithCache {\n private responseCache: Map = new Map();\n private responsePromiseCache: Map = new Map();\n\n clearCache() {\n this.responseCache = new Map();\n this.responsePromiseCache = new Map();\n }\n\n // Todo: should probably be passed a callback instead, or an apiCall instance. Types are messy this way\n async perform(\n requestContext: any,\n requestFunction: (...params: any) => unknown,\n requestFunctionArguments: any[],\n cacheOptions: CacheOptions\n ): Promise {\n const {\n cacheResponseForSeconds = defaultCacheResponseForSeconds,\n maxSize = defaultMaxSize,\n } = cacheOptions;\n const isCacheDisabled = cacheResponseForSeconds <= 0 || maxSize <= 0;\n\n if (isCacheDisabled) {\n return requestFunction.call(requestContext, ...requestFunctionArguments);\n }\n\n const requestFunctionArgumentsJSON = JSON.stringify(\n requestFunctionArguments\n );\n const cacheEntry = this.responseCache.get(requestFunctionArgumentsJSON);\n const now = Date.now();\n\n if (cacheEntry) {\n const isEntryValid =\n now - cacheEntry.requestTimestamp < cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n this.responseCache.set(requestFunctionArgumentsJSON, cacheEntry);\n return Promise.resolve(cacheEntry.response);\n } else {\n this.responseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const cachePromiseEntry = this.responsePromiseCache.get(\n requestFunctionArgumentsJSON\n );\n\n if (cachePromiseEntry) {\n const isEntryValid =\n now - cachePromiseEntry.requestTimestamp <\n cacheResponseForSeconds * 1000;\n if (isEntryValid) {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n this.responsePromiseCache.set(\n requestFunctionArgumentsJSON,\n cachePromiseEntry\n );\n return cachePromiseEntry.responsePromise;\n } else {\n this.responsePromiseCache.delete(requestFunctionArgumentsJSON);\n }\n }\n\n const responsePromise = requestFunction.call(\n requestContext,\n ...requestFunctionArguments\n );\n this.responsePromiseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n responsePromise,\n });\n\n const response = await responsePromise;\n this.responseCache.set(requestFunctionArgumentsJSON, {\n requestTimestamp: now,\n response,\n });\n\n const isCacheOverMaxSize = this.responseCache.size > maxSize;\n if (isCacheOverMaxSize) {\n const oldestEntry = this.responseCache.keys().next().value;\n if (oldestEntry) {\n this.responseCache.delete(oldestEntry);\n }\n }\n const isResponsePromiseCacheOverMaxSize =\n this.responsePromiseCache.size > maxSize;\n if (isResponsePromiseCacheOverMaxSize) {\n const oldestEntry = this.responsePromiseCache.keys().next().value;\n if (oldestEntry) {\n this.responsePromiseCache.delete(oldestEntry);\n }\n }\n return response as T;\n }\n}\n\ninterface CacheOptions {\n cacheResponseForSeconds?: number;\n maxSize?: number;\n}\n","import ApiCall from \"./ApiCall\";\nimport { CollectionFieldSchema, CollectionSchema } from \"./Collection\";\n\nexport interface CollectionCreateSchema {\n name: string;\n default_sorting_field?: string;\n fields?: CollectionFieldSchema[];\n symbols_to_index?: string[];\n token_separators?: string[];\n enable_nested_fields?: boolean;\n metadata?: object;\n voice_query_model?: {\n model_name?: string;\n };\n}\n\nexport interface CollectionCreateOptions {\n src_name?: string;\n}\n\nexport interface CollectionsRetrieveOptions {\n exclude_fields?: string;\n}\n\nconst RESOURCEPATH = \"/collections\";\n\nexport default class Collections {\n constructor(private apiCall: ApiCall) {}\n\n async create(\n schema: CollectionCreateSchema,\n options: CollectionCreateOptions = {},\n ): Promise {\n return this.apiCall.post(RESOURCEPATH, schema, options);\n }\n\n async retrieve(\n options: CollectionsRetrieveOptions = {},\n ): Promise {\n return this.apiCall.get(RESOURCEPATH, options);\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import RequestWithCache from \"./RequestWithCache\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport Collections from \"./Collections\";\nimport type {\n DocumentSchema,\n SearchableDocuments,\n SearchOptions,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/documents\";\n\nexport class SearchOnlyDocuments\n implements SearchableDocuments\n{\n protected requestWithCache: RequestWithCache = new RequestWithCache();\n\n constructor(\n protected collectionName: string,\n protected apiCall: ApiCall,\n protected configuration: Configuration\n ) {}\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n abortSignal = null,\n }: SearchOptions = {}\n ): Promise> {\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n const normalizedParams = normalizeArrayableParams(searchParameters);\n const queryParams = Object.assign(\n {},\n additionalQueryParams,\n normalizedParams,\n );\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.get,\n [this.endpointPath(\"search\"), queryParams, { abortSignal }],\n {\n cacheResponseForSeconds: cacheSearchResultsForSeconds,\n }\n ) as Promise>;\n }\n\n protected endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + operation\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import type { ReadStream } from \"fs\";\nimport ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport { ImportError } from \"./Errors\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\n// Todo: use generic to extract filter_by values\nexport type DeleteQuery =\n | {\n truncate?: true;\n }\n | {\n truncate?: never;\n filter_by?: string;\n batch_size?: number;\n ignore_not_found?: boolean;\n };\n\nexport interface DeleteResponse {\n num_deleted: number;\n}\n\ninterface ImportResponseSuccess {\n success: true;\n}\n\nexport interface ImportResponseFail {\n success: false;\n error: string;\n document: DocumentSchema;\n code: number;\n}\n\nexport type ImportResponse = ImportResponseSuccess | ImportResponseFail;\n\nexport type DocumentSchema = Record;\n\nexport interface SearchParamsWithPreset extends Partial {\n preset: string;\n}\n\nexport type DropTokensMode = \"right_to_left\" | \"left_to_right\" | \"both_sides:3\";\n\nexport type OperationMode = \"off\" | \"always\" | \"fallback\";\n\nexport type UnionArrayKeys = {\n [K in keyof T]: T[K] extends undefined\n ? never\n : NonNullable extends infer R\n ? R extends R[]\n ? never\n : R extends (infer U)[] | infer U\n ? U[] extends R\n ? K\n : never\n : never\n : never;\n}[keyof T] &\n keyof T;\n\nexport type UnionArraySearchParams = UnionArrayKeys;\n\nexport type ArraybleParams = {\n readonly [K in UnionArraySearchParams]: string;\n};\n\nexport type ExtractBaseTypes = {\n [K in keyof T]: K extends UnionArrayKeys\n ? T[K] extends (infer U)[] | infer U\n ? U\n : T[K]\n : T[K];\n};\n\nexport const arrayableParams: ArraybleParams = {\n query_by: \"query_by\",\n query_by_weights: \"query_by_weights\",\n facet_by: \"facet_by\",\n group_by: \"group_by\",\n include_fields: \"include_fields\",\n exclude_fields: \"exclude_fields\",\n highlight_fields: \"highlight_fields\",\n highlight_full_fields: \"highlight_full_fields\",\n pinned_hits: \"pinned_hits\",\n hidden_hits: \"hidden_hits\",\n infix: \"infix\",\n override_tags: \"override_tags\",\n num_typos: \"num_typos\",\n prefix: \"prefix\",\n sort_by: \"sort_by\",\n};\n\nexport interface SearchParams {\n // From https://typesense.org/docs/latest/api/documents.html#arguments\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n q?: \"*\" | (string & {});\n query_by?: string | string[];\n query_by_weights?: string | number[];\n prefix?: string | boolean | boolean[]; // default: true\n filter_by?: string;\n max_filter_by_candidates?: number; // default: 4\n enable_synonyms?: boolean; // default: true\n enable_analytics?: boolean; // default: true\n filter_curated_hits?: boolean; // default: false\n enable_lazy_filter?: boolean; // default: false\n sort_by?: string | string[]; // default: text match desc\n facet_by?: string | string[];\n max_facet_values?: number;\n facet_sample_threshold?: number;\n facet_sample_percent?: number;\n facet_query?: string;\n facet_query_num_typos?: number;\n facet_return_parent?: string;\n facet_strategy?: \"exhaustive\" | \"top_values\" | \"automatic\";\n page?: number; // default: 1\n per_page?: number; // default: 10, max 250\n group_by?: string | string[];\n group_limit?: number; // default:\n group_missing_values?: boolean;\n include_fields?: string | string[];\n exclude_fields?: string | string[];\n highlight_fields?: string | string[]; // default: all queried fields\n highlight_full_fields?: string | string[]; // default: all fields\n highlight_affix_num_tokens?: number; // default: 4\n highlight_start_tag?: string; // default: \n highlight_end_tag?: string; // default: \n enable_highlight_v1?: boolean;\n snippet_threshold?: number; // default: 30\n num_typos?: string | number | number[]; // default: 2\n min_len_1typo?: number;\n min_len_2typo?: number;\n split_join_tokens?: OperationMode;\n exhaustive_search?: boolean;\n drop_tokens_threshold?: number; // default: 10\n drop_tokens_mode?: DropTokensMode;\n typo_tokens_threshold?: number; // default: 100\n pinned_hits?: string | string[];\n hidden_hits?: string | string[];\n limit_hits?: number; // default: no limit\n pre_segmented_query?: boolean;\n enable_overrides?: boolean;\n override_tags?: string | string[];\n prioritize_exact_match?: boolean; // default: true\n prioritize_token_position?: boolean;\n prioritize_num_matching_fields?: boolean;\n search_cutoff_ms?: number;\n use_cache?: boolean;\n max_candidates?: number;\n infix?: OperationMode | OperationMode[];\n preset?: string;\n text_match_type?: \"max_score\" | \"max_weight\";\n vector_query?: string;\n \"x-typesense-api-key\"?: string;\n \"x-typesense-user-id\"?: string;\n offset?: number;\n limit?: number;\n stopwords?: string;\n conversation?: boolean;\n conversation_model_id?: string;\n conversation_id?: string;\n voice_query?: string;\n}\n\ntype SearchResponseHighlightObject = {\n matched_tokens?: string[];\n snippet?: string;\n value?: string;\n};\n\nexport type SearchResponseHighlight = T extends string | number\n ? SearchResponseHighlightObject\n : {\n [TAttribute in keyof T]?: SearchResponseHighlight;\n };\n\nexport interface SearchResponseHit {\n curated?: true;\n highlights?: [\n {\n field: keyof T;\n snippet?: string;\n value?: string;\n snippets?: string[];\n indices?: number[];\n matched_tokens: string[][] | string[];\n },\n ];\n highlight: SearchResponseHighlight;\n document: T;\n text_match: number;\n text_match_info?: {\n best_field_score: `${number}`; // To prevent scores from being truncated by JSON spec\n best_field_weight: number;\n fields_matched: number;\n score: `${number}`; // To prevent scores from being truncated by JSON spec\n tokens_matched: number;\n };\n}\n\nexport interface SearchResponseFacetCountSchema {\n counts: {\n count: number;\n highlighted: string;\n value: string;\n }[];\n field_name: keyof T;\n stats: {\n avg?: number;\n max?: number;\n min?: number;\n sum?: number;\n };\n}\n\nexport interface SearchResponseRequestParams {\n collection_name?: string;\n q?: string;\n page?: number;\n per_page?: number;\n first_q?: string;\n voice_query?: {\n transcribed_query?: string;\n };\n}\n\n// Todo: we could infer whether this is a grouped response by adding the search params as a generic\nexport interface SearchResponse {\n facet_counts?: SearchResponseFacetCountSchema[];\n found: number;\n found_docs?: number;\n out_of: number;\n page: number;\n request_params: SearchResponseRequestParams;\n search_time_ms: number;\n search_cutoff?: boolean;\n hits?: SearchResponseHit[];\n grouped_hits?: {\n group_key: string[];\n hits: SearchResponseHit[];\n found?: number;\n }[];\n conversation?: {\n answer: string;\n conversation_history: {\n conversation: object[];\n id: string;\n last_updated: number;\n ttl: number;\n };\n conversation_id: string;\n query: string;\n };\n error?: string;\n code?: number;\n}\n\nexport interface DocumentWriteParameters {\n dirty_values?: \"coerce_or_reject\" | \"coerce_or_drop\" | \"drop\" | \"reject\";\n action?: \"create\" | \"update\" | \"upsert\" | \"emplace\";\n}\n\nexport interface UpdateByFilterParameters {\n filter_by?: string;\n}\n\nexport interface UpdateByFilterResponse {\n num_updated: number;\n}\n\nexport interface DocumentImportParameters extends DocumentWriteParameters {\n batch_size?: number;\n return_doc?: boolean;\n return_id?: boolean;\n}\n\nexport interface DocumentsExportParameters {\n filter_by?: string;\n include_fields?: string;\n exclude_fields?: string;\n}\n\nexport interface SearchableDocuments {\n search(\n searchParameters: SearchParams | SearchParamsWithPreset,\n options: SearchOptions,\n ): Promise>;\n clearCache(): void;\n}\n\nexport interface WriteableDocuments {\n create(document: T, options: DocumentWriteParameters): Promise;\n upsert(document: T, options: DocumentWriteParameters): Promise;\n update(document: T, options: DocumentWriteParameters): Promise;\n delete(query: DeleteQuery): Promise;\n import(\n documents: T[] | string,\n options: DocumentWriteParameters,\n ): Promise;\n export(options: DocumentsExportParameters): Promise;\n}\n\nexport interface SearchOptions {\n cacheSearchResultsForSeconds?: number;\n abortSignal?: AbortSignal | null;\n}\n\nconst isNodeJSEnvironment =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nexport default class Documents\n extends SearchOnlyDocuments\n implements WriteableDocuments\n{\n constructor(\n collectionName: string,\n apiCall: ApiCall,\n configuration: Configuration,\n ) {\n super(collectionName, apiCall, configuration);\n }\n\n async create(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(this.endpointPath(), document, options);\n }\n\n async upsert(document: T, options: DocumentWriteParameters = {}): Promise {\n if (!document) throw new Error(\"No document provided\");\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"upsert\" }),\n );\n }\n\n async update(\n document: T,\n options: UpdateByFilterParameters,\n ): Promise;\n async update(document: T, options: DocumentWriteParameters): Promise;\n async update(\n document: T,\n options: DocumentWriteParameters | UpdateByFilterParameters = {},\n ): Promise {\n if (!document) throw new Error(\"No document provided\");\n\n if (options[\"filter_by\"] != null) {\n return this.apiCall.patch(\n this.endpointPath(),\n document,\n Object.assign({}, options),\n );\n } else {\n return this.apiCall.post(\n this.endpointPath(),\n document,\n Object.assign({}, options, { action: \"update\" }),\n );\n }\n }\n\n async delete(\n query: DeleteQuery = {} as DeleteQuery,\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), query);\n }\n\n async createMany(documents: T[], options: DocumentImportParameters = {}) {\n this.configuration.logger.warn(\n \"createMany is deprecated and will be removed in a future version. Use import instead, which now takes both an array of documents or a JSONL string of documents\",\n );\n return this.import(documents, options);\n }\n\n /**\n * Import a set of documents in a batch.\n * @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.\n * @param options\n * @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.\n */\n async import(\n documents: string,\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[],\n options?: DocumentImportParameters,\n ): Promise;\n async import(\n documents: T[] | string,\n options: DocumentImportParameters = {},\n ): Promise {\n let documentsInJSONLFormat;\n if (Array.isArray(documents)) {\n try {\n documentsInJSONLFormat = documents\n .map((document) => JSON.stringify(document))\n .join(\"\\n\");\n } catch (error: any) {\n // if rangeerror, throw custom error message\n if (\n error instanceof RangeError &&\n error.message.includes(\"Too many properties to enumerate\")\n ) {\n throw new Error(`${error}\n It looks like you have reached a Node.js limit that restricts the number of keys in an Object: https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript-object\n\n Please try reducing the number of keys in your document, or using CURL to import your data.\n `);\n }\n\n // else, throw the non-range error anyways\n throw new Error(error);\n }\n } else {\n documentsInJSONLFormat = documents;\n }\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: documentsInJSONLFormat,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n if (Array.isArray(documents)) {\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter(\n (r) => r.success === false,\n );\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n } else {\n return resultsInJSONLFormat as string;\n }\n }\n /**\n * Imports documents from a NodeJS readable stream of JSONL.\n */\n async importStream(\n readableStream: ReadStream,\n options: DocumentImportParameters = {},\n ): Promise {\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: options,\n bodyParameters: readableStream,\n additionalHeaders: { \"Content-Type\": \"text/plain\" },\n skipConnectionTimeout: true, // We never want to client-side-timeout on an import and retry, since imports are syncronous and we want to let them take as long as it takes to complete fully\n enableKeepAlive: isNodeJSEnvironment ? true : false, // This is to prevent ECONNRESET socket hang up errors. Reference: https://github.com/axios/axios/issues/2936#issuecomment-779439991\n },\n );\n\n const resultsInJSONFormat = resultsInJSONLFormat\n .split(\"\\n\")\n .map((r) => JSON.parse(r)) as ImportResponse[];\n const failedItems = resultsInJSONFormat.filter((r) => r.success === false);\n if (failedItems.length > 0) {\n throw new ImportError(\n `${\n resultsInJSONFormat.length - failedItems.length\n } documents imported successfully, ${\n failedItems.length\n } documents failed during import. Use \\`error.importResults\\` from the raised exception to get a detailed error reason for each document.`,\n resultsInJSONFormat,\n {\n documentsInJSONLFormat: readableStream,\n options,\n failedItems,\n successCount: resultsInJSONFormat.length - failedItems.length,\n },\n );\n } else {\n return resultsInJSONFormat;\n }\n }\n\n /**\n * Returns a JSONL string for all the documents in this collection\n */\n async export(options: DocumentsExportParameters = {}): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options);\n }\n\n /**\n * Returns a NodeJS readable stream of JSONL for all the documents in this collection.\n */\n async exportStream(\n options: DocumentsExportParameters = {},\n ): Promise {\n return this.apiCall.get(this.endpointPath(\"export\"), options, {\n responseType: \"stream\",\n });\n }\n}\n","import { arrayableParams } from \"./Documents\";\nimport type {\n UnionArrayKeys,\n ExtractBaseTypes,\n SearchParams,\n} from \"./Documents\";\n\nfunction hasNoArrayValues(\n params: T | ExtractBaseTypes,\n): params is ExtractBaseTypes {\n return Object.keys(arrayableParams)\n .filter((key) => params[key] !== undefined)\n .every((key) => isNonArrayValue(params[key]));\n}\n\nexport function normalizeArrayableParams(\n params: T,\n): Prettify> {\n const result = { ...params };\n\n const transformedValues = Object.keys(arrayableParams)\n .filter((key) => Array.isArray(result[key]))\n .map((key) => {\n result[key] = result[key].join(\",\");\n return key;\n });\n\n if (!transformedValues.length && hasNoArrayValues(result)) {\n return result;\n }\n\n if (!hasNoArrayValues(result)) {\n throw new Error(\n `Failed to normalize arrayable params: ${JSON.stringify(result)}`,\n );\n }\n\n return result;\n}\n\nfunction isNonArrayValue>(\n value: T[K] | ExtractBaseTypes[K],\n): value is ExtractBaseTypes[K] {\n return !Array.isArray(value);\n}\n\ntype Prettify = {\n [K in keyof T]: T[K];\n // eslint-disable-next-line @typescript-eslint/ban-types\n} & {};\n","import ApiCall from \"./ApiCall\";\nimport Configuration from \"./Configuration\";\nimport RequestWithCache from \"./RequestWithCache\";\nimport {\n DocumentSchema,\n SearchParams,\n SearchParamsWithPreset,\n SearchResponse,\n} from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/multi_search\";\n\nexport interface MultiSearchRequestSchema extends SearchParams {\n collection?: string;\n rerank_hybrid_matches?: boolean;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestWithPresetSchema\n extends SearchParamsWithPreset {\n collection?: string;\n \"x-typesense-api-key\"?: string;\n}\n\nexport interface MultiSearchRequestsSchema {\n union?: true;\n searches: (MultiSearchRequestSchema | MultiSearchRequestWithPresetSchema)[];\n}\n\nexport interface MultiSearchResponse {\n results: { [Index in keyof T]: SearchResponse } & {\n length: T[\"length\"];\n };\n}\n\nexport default class MultiSearch {\n private requestWithCache: RequestWithCache;\n\n constructor(\n private apiCall: ApiCall,\n private configuration: Configuration,\n private useTextContentType: boolean = false\n ) {\n this.requestWithCache = new RequestWithCache();\n }\n\n clearCache() {\n this.requestWithCache.clearCache();\n }\n\n async perform(\n searchRequests: MultiSearchRequestsSchema,\n commonParams: Partial = {},\n {\n cacheSearchResultsForSeconds = this.configuration\n .cacheSearchResultsForSeconds,\n }: { cacheSearchResultsForSeconds?: number } = {}\n ): Promise> {\n const additionalHeaders = {};\n if (this.useTextContentType) {\n additionalHeaders[\"content-type\"] = \"text/plain\";\n }\n\n const additionalQueryParams = {};\n if (this.configuration.useServerSideSearchCache === true) {\n additionalQueryParams[\"use_cache\"] = true;\n }\n\n const queryParams = { ...commonParams, ...additionalQueryParams };\n\n const normalizedSearchRequests = {\n searches: searchRequests.searches.map(normalizeArrayableParams),\n };\n\n const normalizedQueryParams = normalizeArrayableParams(queryParams);\n\n return this.requestWithCache.perform(\n this.apiCall,\n this.apiCall.post,\n [\n RESOURCEPATH,\n normalizedSearchRequests,\n normalizedQueryParams,\n additionalHeaders,\n ],\n { cacheResponseForSeconds: cacheSearchResultsForSeconds },\n ) as Promise>;\n }\n}\n","import { DocumentSchema, SearchableDocuments } from \"./Documents\";\nimport ApiCall from \"./ApiCall\";\nimport { SearchOnlyDocuments } from \"./SearchOnlyDocuments\";\n\nexport class SearchOnlyCollection {\n private readonly _documents: SearchableDocuments;\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any\n ) {\n this._documents = new SearchOnlyDocuments(\n this.name,\n this.apiCall,\n this.configuration\n );\n }\n\n documents(): SearchableDocuments {\n return this._documents;\n }\n}\n","import Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport MultiSearch from \"./MultiSearch\";\nimport { DocumentSchema } from \"./Documents\";\nimport { SearchOnlyCollection } from \"./SearchOnlyCollection\";\n\nexport default class SearchClient {\n public readonly multiSearch: MultiSearch;\n private readonly configuration: Configuration;\n private readonly apiCall: ApiCall;\n private readonly individualCollections: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? true;\n if (\n options.sendApiKeyAsQueryParam === true &&\n (options.apiKey || \"\").length > 2000\n ) {\n console.warn(\n \"[typesense] API Key is longer than 2000 characters which is over the allowed limit, so disabling sending it as a query parameter.\"\n );\n options.sendApiKeyAsQueryParam = false;\n }\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration, true);\n this.individualCollections = {};\n }\n\n clearCache() {\n this.multiSearch.clearCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(this.individualCollections).forEach(([_, collection]) => {\n collection.documents().clearCache();\n });\n }\n\n collections(\n collectionName: string\n ): SearchOnlyCollection | SearchOnlyCollection {\n if (!collectionName) {\n throw new Error(\n \"Typesense.SearchClient only supports search operations, so the collectionName that needs to \" +\n \"be searched must be specified. Use Typesense.Client if you need to access the collection object.\"\n );\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new SearchOnlyCollection(\n collectionName,\n this.apiCall,\n this.configuration\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { OverrideSchema } from \"./Override\";\n\nconst RESOURCEPATH = \"/overrides\";\n\nexport interface OverrideRuleQuerySchema {\n query?: string;\n match?: \"exact\" | \"contains\";\n}\n\nexport interface OverrideRuleFilterSchema {\n filter_by?: string;\n}\n\nexport interface OverrideRuleTagsSchema {\n tags?: string[];\n}\n\nexport interface OverrideCreateSchema {\n rule: OverrideRuleQuerySchema &\n OverrideRuleFilterSchema &\n OverrideRuleTagsSchema;\n filter_by?: string;\n sort_by?: string;\n remove_matched_tokens?: boolean;\n replace_query?: string;\n includes?: Array<{\n id: string;\n position: number;\n }>;\n excludes?: Array<{ id: string }>;\n filter_curated_hits?: boolean;\n effective_from_ts?: number;\n effective_to_ts?: number;\n stop_processing?: boolean;\n metadata?: object;\n}\n\nexport interface OverridesRetrieveSchema {\n overrides: OverrideSchema[];\n}\n\nexport default class Overrides {\n constructor(\n private collectionName: string,\n private apiCall: ApiCall,\n ) {}\n\n async upsert(\n overrideId: string,\n params: OverrideCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(overrideId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Collections.RESOURCEPATH}/${this.collectionName}${\n Overrides.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Overrides, { OverrideCreateSchema } from \"./Overrides\";\n\nexport interface OverrideSchema extends OverrideCreateSchema {\n id: string;\n}\n\nexport interface OverrideDeleteSchema {\n id: string;\n}\n\nexport default class Override {\n constructor(\n private collectionName: string,\n private overrideId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Overrides.RESOURCEPATH}/${encodeURIComponent(this.overrideId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport { SynonymSchema } from \"./Synonym\";\n\nconst RESOURCEPATH = \"/synonyms\";\n\nexport interface SynonymCreateSchema {\n synonyms: string[];\n root?: string;\n locale?: string;\n symbols_to_index?: string[];\n}\n\nexport interface SynonymsRetrieveSchema {\n synonyms: SynonymSchema[];\n}\n\nexport default class Synonyms {\n constructor(private collectionName: string, private apiCall: ApiCall) {}\n\n async upsert(\n synonymId: string,\n params: SynonymCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(synonymId),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string) {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${\n Synonyms.RESOURCEPATH\n }${operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Synonyms, { SynonymCreateSchema } from \"./Synonyms\";\n\nexport interface SynonymSchema extends SynonymCreateSchema {\n id: string;\n}\n\nexport interface SynonymDeleteSchema {\n id: string;\n}\n\nexport default class Synonym {\n constructor(\n private collectionName: string,\n private synonymId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Synonyms.RESOURCEPATH}/${encodeURIComponent(this.synonymId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Documents, {\n DeleteQuery,\n DocumentSchema,\n DocumentWriteParameters,\n} from \"./Documents\";\n\nexport class Document {\n constructor(\n private collectionName: string,\n private documentId: string,\n private apiCall: ApiCall\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(options?: DeleteQuery): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async update(\n partialDocument: Partial,\n options: DocumentWriteParameters = {}\n ): Promise {\n return this.apiCall.patch(this.endpointPath(), partialDocument, options);\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.collectionName)}${Documents.RESOURCEPATH}/${encodeURIComponent(this.documentId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Collections, { CollectionCreateSchema } from \"./Collections\";\nimport Documents, { DocumentSchema } from \"./Documents\";\nimport { ObjectNotFound } from \"./Errors\";\nimport Overrides from \"./Overrides\";\nimport Override from \"./Override\";\nimport Synonyms from \"./Synonyms\";\nimport Synonym from \"./Synonym\";\nimport { Document } from \"./Document\";\n\nexport type FieldType =\n | \"string\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"bool\"\n | \"geopoint\"\n | \"geopolygon\"\n | \"geopoint[]\"\n | \"string[]\"\n | \"int32[]\"\n | \"int64[]\"\n | \"float[]\"\n | \"bool[]\"\n | \"object\"\n | \"object[]\"\n | \"auto\"\n | \"string*\"\n | \"image\";\n\nexport interface CollectionFieldSchema\n extends Pick<\n CollectionCreateSchema,\n \"token_separators\" | \"symbols_to_index\"\n > {\n name: string;\n type: FieldType;\n optional?: boolean;\n facet?: boolean;\n index?: boolean;\n sort?: boolean;\n locale?: string;\n infix?: boolean;\n stem?: boolean;\n num_dim?: number;\n store?: boolean;\n range_index?: boolean;\n [t: string]: unknown;\n}\n\nexport interface CollectionSchema extends CollectionCreateSchema {\n created_at: number;\n num_documents: number;\n num_memory_shards: number;\n}\n\nexport interface CollectionDropFieldSchema {\n name: string;\n drop: true;\n}\n\nexport interface CollectionUpdateSchema\n extends Partial> {\n fields?: (CollectionFieldSchema | CollectionDropFieldSchema)[];\n}\n\nexport interface CollectionDeleteOptions {\n compact_store?: boolean;\n}\n\nexport default class Collection {\n private readonly _documents: Documents;\n private individualDocuments: Record> = {};\n private readonly _overrides: Overrides;\n private individualOverrides: Record = {};\n private readonly _synonyms: Synonyms;\n private individualSynonyms: Record = {};\n\n constructor(\n private readonly name: string,\n private readonly apiCall: ApiCall,\n private readonly configuration: any,\n ) {\n this.name = name;\n this.apiCall = apiCall;\n this.configuration = configuration;\n\n this._documents = new Documents(\n this.name,\n this.apiCall,\n this.configuration,\n );\n this._overrides = new Overrides(this.name, this.apiCall);\n this._synonyms = new Synonyms(this.name, this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(schema: CollectionUpdateSchema): Promise {\n return this.apiCall.patch(this.endpointPath(), schema);\n }\n\n async delete(\n options: CollectionDeleteOptions = {},\n ): Promise {\n return this.apiCall.delete(this.endpointPath(), options);\n }\n\n async exists(): Promise {\n try {\n await this.retrieve();\n return true;\n } catch (e) {\n if (e instanceof ObjectNotFound) return false;\n throw e;\n }\n }\n\n documents(): Documents;\n documents(documentId: string): Document;\n documents(documentId?: string): Document | Documents {\n if (!documentId) {\n return this._documents;\n } else {\n if (this.individualDocuments[documentId] === undefined) {\n this.individualDocuments[documentId] = new Document(\n this.name,\n documentId,\n this.apiCall,\n );\n }\n return this.individualDocuments[documentId];\n }\n }\n\n overrides(): Overrides;\n overrides(overrideId: string): Override;\n overrides(overrideId?: string): Overrides | Override {\n if (overrideId === undefined) {\n return this._overrides;\n } else {\n if (this.individualOverrides[overrideId] === undefined) {\n this.individualOverrides[overrideId] = new Override(\n this.name,\n overrideId,\n this.apiCall,\n );\n }\n return this.individualOverrides[overrideId];\n }\n }\n\n synonyms(): Synonyms;\n synonyms(synonymId: string): Synonym;\n synonyms(synonymId?: string): Synonyms | Synonym {\n if (synonymId === undefined) {\n return this._synonyms;\n } else {\n if (this.individualSynonyms[synonymId] === undefined) {\n this.individualSynonyms[synonymId] = new Synonym(\n this.name,\n synonymId,\n this.apiCall,\n );\n }\n return this.individualSynonyms[synonymId];\n }\n }\n\n private endpointPath(): string {\n return `${Collections.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/aliases\";\n\nexport interface CollectionAliasCreateSchema {\n collection_name: string;\n}\n\nexport interface CollectionAliasSchema extends CollectionAliasCreateSchema {\n name: string;\n}\n\nexport interface CollectionAliasesResponseSchema {\n aliases: CollectionAliasSchema[];\n}\n\nexport default class Aliases {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n name: string,\n mapping: CollectionAliasCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n mapping\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n private endpointPath(aliasName): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(aliasName)}`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import Aliases, { CollectionAliasSchema } from \"./Aliases\";\nimport ApiCall from \"./ApiCall\";\n\nexport default class Alias {\n constructor(private name: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Aliases.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import { createHmac } from \"crypto\";\nimport ApiCall from \"./ApiCall\";\nimport { KeyCreateSchema, KeySchema } from \"./Key\";\nimport { SearchParams } from \"./Documents\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/keys\";\n\nexport interface KeysRetrieveSchema {\n keys: KeySchema[];\n}\n\nexport interface GenerateScopedSearchKeyParams extends Partial {\n expires_at?: number;\n cache_ttl?: number;\n limit_multi_searches?: number;\n}\n\nexport default class Keys {\n constructor(private apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(params: KeyCreateSchema): Promise {\n return this.apiCall.post(Keys.RESOURCEPATH, params);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n generateScopedSearchKey(\n searchKey: string,\n parameters: GenerateScopedSearchKeyParams\n ): string {\n // Note: only a key generated with the `documents:search` action will be\n // accepted by the server, when usined with the search endpoint.\n const normalizedParams = normalizeArrayableParams(parameters);\n const paramsJSON = JSON.stringify(normalizedParams);\n const digest = Buffer.from(\n createHmac(\"sha256\", searchKey).update(paramsJSON).digest(\"base64\")\n );\n const keyPrefix = searchKey.substr(0, 4);\n const rawScopedKey = `${digest}${keyPrefix}${paramsJSON}`;\n\n return Buffer.from(rawScopedKey).toString(\"base64\");\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Keys from \"./Keys\";\n\nexport interface KeyCreateSchema {\n actions: string[];\n collections: string[];\n description?: string;\n value?: string;\n value_prefix?: string;\n expires_at?: number;\n autodelete?: boolean;\n}\n\nexport interface KeyDeleteSchema {\n id: number;\n}\n\nexport interface KeySchema extends KeyCreateSchema {\n id: number;\n}\n\nexport default class Key {\n constructor(\n private id: number,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Keys.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/debug\";\n\nexport interface DebugResponseSchema {\n state: number;\n version: string;\n}\n\nexport default class Debug {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/metrics.json\";\n\nexport interface MetricsResponse {\n [key: `system_cpu${number}_active_percentage`]: string;\n system_cpu_active_percentage: string;\n system_disk_total_bytes: string;\n system_disk_used_bytes: string;\n system_memory_total_bytes: string;\n system_memory_total_swap_bytes?: string;\n system_memory_used_bytes: string;\n system_memory_used_swap_bytes?: string;\n system_network_received_bytes: string;\n system_network_sent_bytes: string;\n typesense_memory_active_bytes: string;\n typesense_memory_allocated_bytes: string;\n typesense_memory_fragmentation_ratio: string;\n typesense_memory_mapped_bytes: string;\n typesense_memory_metadata_bytes: string;\n typesense_memory_resident_bytes: string;\n typesense_memory_retained_bytes: string;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/stats.json\";\n\nexport interface EndpointStats {\n [endpoint: string]: number;\n}\n\nexport interface StatsResponse {\n delete_latency_ms?: number;\n delete_requests_per_second?: number;\n import_latency_ms?: number;\n import_requests_per_second?: number;\n latency_ms?: EndpointStats;\n overloaded_requests_per_second?: number;\n pending_write_batches?: number;\n requests_per_second?: EndpointStats;\n search_latency_ms?: number;\n search_requests_per_second?: number;\n total_requests_per_second?: number;\n write_latency_ms?: number;\n write_requests_per_second?: number;\n}\n\nexport default class Metrics {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/health\";\n\nexport interface HealthResponse {\n ok: boolean;\n}\n\nexport default class Health {\n constructor(private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n}\n","import ApiCall from \"./ApiCall\";\n\nconst RESOURCEPATH = \"/operations\";\n\nexport default class Operations {\n constructor(private apiCall: ApiCall) {}\n\n async perform(\n operationName:\n | \"vote\"\n | \"snapshot\"\n | \"cache/clear\"\n | \"schema_changes\"\n // eslint-disable-next-line @typescript-eslint/ban-types -- Can't use `object` here, it needs to intersect with `{}`\n | (string & {}),\n queryParameters: Record = {},\n ): Promise {\n return this.apiCall.post(\n `${RESOURCEPATH}/${operationName}`,\n {},\n queryParameters,\n );\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { PresetSchema } from \"./Preset\";\nimport { SearchParams } from \"./Documents\";\nimport { MultiSearchRequestsSchema } from \"./MultiSearch\";\nimport { normalizeArrayableParams } from \"./Utils\";\n\nconst RESOURCEPATH = \"/presets\";\n\nexport interface PresetCreateSchema {\n value: SearchParams | MultiSearchRequestsSchema;\n}\n\nexport interface PresetsRetrieveSchema {\n presets: PresetSchema[];\n}\n\nexport default class Presets {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n presetId: string,\n params: PresetCreateSchema,\n ): Promise {\n if (typeof params.value === \"object\" && \"searches\" in params.value) {\n const normalizedParams = params.value.searches.map((search) =>\n normalizeArrayableParams(search),\n );\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: { searches: normalizedParams },\n });\n }\n const normalizedParams = normalizeArrayableParams(params.value);\n\n return this.apiCall.put(this.endpointPath(presetId), {\n value: normalizedParams,\n });\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Presets.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Presets, { PresetCreateSchema } from \"./Presets\";\n\nexport interface PresetSchema extends PresetCreateSchema {\n name: string;\n}\n\nexport interface PresetDeleteSchema {\n name: string;\n}\n\nexport default class Preset {\n constructor(private presetId: string, private apiCall: ApiCall) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Presets.RESOURCEPATH}/${encodeURIComponent(this.presetId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n AnalyticsRuleCreateSchema,\n AnalyticsRuleSchema,\n} from \"./AnalyticsRule\";\n\nexport interface AnalyticsRulesRetrieveSchema {\n rules: AnalyticsRuleSchema[];\n}\n\nconst RESOURCEPATH = \"/analytics/rules\";\n\nexport default class AnalyticsRules {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n name: string,\n params: AnalyticsRuleCreateSchema\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(name),\n params\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsRules.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\n\nexport interface AnalyticsRuleCreateSchema {\n type: \"popular_queries\" | \"nohits_queries\" | \"counter\";\n params: {\n enable_auto_aggregation?: boolean;\n source: {\n collections: string[];\n events?: Array<{\n type: string;\n weight: number;\n name: string;\n }>;\n };\n expand_query?: boolean;\n destination: {\n collection: string;\n counter_field?: string;\n };\n limit?: number;\n };\n}\n\nexport interface AnalyticsRuleDeleteSchema {\n name: string;\n}\n\nexport interface AnalyticsRuleSchema extends AnalyticsRuleCreateSchema {\n name: string;\n}\n\nexport default class AnalyticsRule {\n constructor(\n private name: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${AnalyticsRules.RESOURCEPATH}/${encodeURIComponent(this.name)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { AnalyticsEventCreateSchema } from \"./AnalyticsEvent\";\n\nconst RESOURCEPATH = \"/analytics/events\";\n\nexport default class AnalyticsEvents {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: AnalyticsEventCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${AnalyticsEvents.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport AnalyticsRules from \"./AnalyticsRules\";\nimport AnalyticsRule from \"./AnalyticsRule\";\nimport AnalyticsEvents from \"./AnalyticsEvents\";\n\nconst RESOURCEPATH = \"/analytics\";\n\nexport default class Analytics {\n private readonly _analyticsRules: AnalyticsRules;\n private readonly individualAnalyticsRules: Record = {};\n private readonly _analyticsEvents: AnalyticsEvents;\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._analyticsRules = new AnalyticsRules(this.apiCall);\n this._analyticsEvents = new AnalyticsEvents(this.apiCall);\n }\n\n rules(): AnalyticsRules;\n rules(id: string): AnalyticsRule;\n rules(id?: string): AnalyticsRules | AnalyticsRule {\n if (id === undefined) {\n return this._analyticsRules;\n } else {\n if (this.individualAnalyticsRules[id] === undefined) {\n this.individualAnalyticsRules[id] = new AnalyticsRule(id, this.apiCall);\n }\n return this.individualAnalyticsRules[id];\n }\n }\n\n events(): AnalyticsEvents {\n return this._analyticsEvents;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport { StopwordSchema } from \"./Stopword\";\n\nconst RESOURCEPATH = \"/stopwords\";\n\nexport interface StopwordCreateSchema {\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordsRetrieveSchema {\n stopwords: StopwordSchema[];\n}\n\nexport default class Stopwords {\n constructor(private apiCall: ApiCall) {}\n\n async upsert(\n stopwordId: string,\n params: StopwordCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(stopwordId),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(operation?: string): string {\n return `${Stopwords.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH(): string {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Stopwords, { StopwordCreateSchema } from \"./Stopwords\";\n\nexport interface StopwordSchema extends StopwordCreateSchema {\n id: string;\n stopwords: string[];\n locale?: string;\n}\n\nexport interface StopwordDeleteSchema {\n id: string;\n}\n\nexport default class Stopword {\n constructor(\n private stopwordId: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Stopwords.RESOURCEPATH}/${encodeURIComponent(this.stopwordId)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport {\n ConversationModelCreateSchema,\n ConversationModelSchema,\n} from \"./ConversationModel\";\n\nconst RESOURCEPATH = \"/conversations/models\";\n\nexport default class ConversationModels {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async create(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.post(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return `${ConversationModels.RESOURCEPATH}${\n operation === undefined ? \"\" : \"/\" + encodeURIComponent(operation)\n }`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\n\nexport interface ConversationModelCreateSchema {\n id?: string;\n model_name: string;\n api_key?: string;\n system_prompt?: string;\n max_bytes: number;\n history_collection?: string;\n}\n\nexport interface ConversationModelDeleteSchema {\n id: string;\n}\n\nexport interface ConversationModelSchema extends ConversationModelCreateSchema {\n id: string;\n}\n\nexport default class ConversationModel {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async update(\n params: ConversationModelCreateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async delete(): Promise {\n return this.apiCall.delete(\n this.endpointPath(),\n );\n }\n\n private endpointPath(): string {\n return `${ConversationModels.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport ConversationModels from \"./ConversationModels\";\nimport ConversationModel from \"./ConversationModel\";\nimport { ConversationSchema } from \"./Conversation\";\n\nconst RESOURCEPATH = \"/conversations\";\n\nexport interface ConversationsRetrieveSchema {\n conversations: ConversationSchema[];\n}\n\nexport default class Conversations {\n private readonly _conversationsModels: ConversationModels;\n private readonly individualConversationModels: Record<\n string,\n ConversationModel\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._conversationsModels = new ConversationModels(this.apiCall);\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(RESOURCEPATH);\n }\n\n models(): ConversationModels;\n models(id: string): ConversationModel;\n models(id?: string): ConversationModels | ConversationModel {\n if (id === undefined) {\n return this._conversationsModels;\n } else {\n if (this.individualConversationModels[id] === undefined) {\n this.individualConversationModels[id] = new ConversationModel(\n id,\n this.apiCall,\n );\n }\n return this.individualConversationModels[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport Conversations from \"./Conversations\";\n\nexport interface ConversationDeleteSchema {\n id: number;\n}\n\nexport interface ConversationUpdateSchema {\n ttl: number;\n}\n\nexport interface ConversationSchema {\n id: number;\n conversation: object[];\n last_updated: number;\n ttl: number;\n}\n\nexport default class Conversation {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n async update(\n params: ConversationUpdateSchema,\n ): Promise {\n return this.apiCall.put(\n this.endpointPath(),\n params,\n );\n }\n\n async delete(): Promise {\n return this.apiCall.delete(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${Conversations.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport type { StemmingDictionaryCreateSchema } from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming/dictionaries\";\n\nexport interface StemmingDictionariesRetrieveSchema {\n dictionaries: string[];\n}\n\nexport default class StemmingDictionaries {\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n }\n\n async upsert(\n id: string,\n wordRootCombinations: StemmingDictionaryCreateSchema[] | string,\n ): Promise {\n const wordRootCombinationsInJSONLFormat = Array.isArray(\n wordRootCombinations,\n )\n ? wordRootCombinations.map((combo) => JSON.stringify(combo)).join(\"\\n\")\n : wordRootCombinations;\n\n const resultsInJSONLFormat = await this.apiCall.performRequest(\n\n \"post\",\n this.endpointPath(\"import\"),\n {\n queryParameters: {id},\n bodyParameters: wordRootCombinationsInJSONLFormat,\n additionalHeaders: {\"Content-Type\": \"text/plain\"},\n skipConnectionTimeout: true,\n }\n );\n\n return Array.isArray(wordRootCombinations)\n ? resultsInJSONLFormat\n .split(\"\\n\")\n .map((line) => JSON.parse(line) as StemmingDictionaryCreateSchema)\n : resultsInJSONLFormat;\n }\n\n async retrieve(): Promise {\n return this.apiCall.get(\n this.endpointPath(),\n );\n }\n\n private endpointPath(operation?: string): string {\n return operation === undefined\n ? `${StemmingDictionaries.RESOURCEPATH}`\n : `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(operation)}`;\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","import ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\n\nexport interface StemmingDictionaryCreateSchema {\n root: string;\n word: string;\n}\n\nexport interface StemmingDictionarySchema {\n id: string;\n words: StemmingDictionaryCreateSchema[];\n}\n\nexport default class StemmingDictionary {\n constructor(\n private id: string,\n private apiCall: ApiCall,\n ) {}\n\n async retrieve(): Promise {\n return this.apiCall.get(this.endpointPath());\n }\n\n private endpointPath(): string {\n return `${StemmingDictionaries.RESOURCEPATH}/${encodeURIComponent(this.id)}`;\n }\n}\n","import type ApiCall from \"./ApiCall\";\nimport StemmingDictionaries from \"./StemmingDictionaries\";\nimport StemmingDictionary from \"./StemmingDictionary\";\n\nconst RESOURCEPATH = \"/stemming\";\n\nexport default class Stemming {\n private readonly _stemmingDictionaries: StemmingDictionaries;\n private readonly individualStemmingDictionaries: Record<\n string,\n StemmingDictionary\n > = {};\n\n constructor(private readonly apiCall: ApiCall) {\n this.apiCall = apiCall;\n this._stemmingDictionaries = new StemmingDictionaries(this.apiCall);\n }\n\n dictionaries(): StemmingDictionaries;\n dictionaries(id: string): StemmingDictionary;\n dictionaries(id?: string): StemmingDictionaries | StemmingDictionary {\n if (id === undefined) {\n return this._stemmingDictionaries;\n } else {\n if (this.individualStemmingDictionaries[id] === undefined) {\n this.individualStemmingDictionaries[id] = new StemmingDictionary(\n id,\n this.apiCall,\n );\n }\n return this.individualStemmingDictionaries[id];\n }\n }\n\n static get RESOURCEPATH() {\n return RESOURCEPATH;\n }\n}\n","/* eslint-disable no-dupe-class-members */\n\nimport Configuration, { ConfigurationOptions } from \"./Configuration\";\nimport ApiCall from \"./ApiCall\";\nimport Collections from \"./Collections\";\nimport Collection from \"./Collection\";\nimport Aliases from \"./Aliases\";\nimport Alias from \"./Alias\";\nimport Keys from \"./Keys\";\nimport Key from \"./Key\";\nimport Debug from \"./Debug\";\nimport Metrics from \"./Metrics\";\nimport Stats from \"./Stats\";\nimport Health from \"./Health\";\nimport Operations from \"./Operations\";\nimport MultiSearch from \"./MultiSearch\";\nimport Presets from \"./Presets\";\nimport Preset from \"./Preset\";\nimport Analytics from \"./Analytics\";\nimport Stopwords from \"./Stopwords\";\nimport Stopword from \"./Stopword\";\nimport Conversations from \"./Conversations\";\nimport Conversation from \"./Conversation\";\nimport Stemming from \"./Stemming\";\n\nexport default class Client {\n configuration: Configuration;\n apiCall: ApiCall;\n debug: Debug;\n metrics: Metrics;\n stats: Stats;\n health: Health;\n operations: Operations;\n multiSearch: MultiSearch;\n analytics: Analytics;\n stemming: Stemming;\n private readonly _collections: Collections;\n private readonly individualCollections: Record;\n private readonly _aliases: Aliases;\n private readonly individualAliases: Record;\n private readonly _keys: Keys;\n private readonly individualKeys: Record;\n private readonly _presets: Presets;\n private readonly individualPresets: Record;\n private readonly _stopwords: Stopwords;\n private readonly individualStopwords: Record;\n private readonly _conversations: Conversations;\n private readonly individualConversations: Record;\n\n constructor(options: ConfigurationOptions) {\n options.sendApiKeyAsQueryParam = options.sendApiKeyAsQueryParam ?? false;\n\n this.configuration = new Configuration(options);\n this.apiCall = new ApiCall(this.configuration);\n this.debug = new Debug(this.apiCall);\n this.metrics = new Metrics(this.apiCall);\n this.stats = new Stats(this.apiCall);\n this.health = new Health(this.apiCall);\n this.operations = new Operations(this.apiCall);\n this.multiSearch = new MultiSearch(this.apiCall, this.configuration);\n this._collections = new Collections(this.apiCall);\n this.individualCollections = {};\n this._aliases = new Aliases(this.apiCall);\n this.individualAliases = {};\n this._keys = new Keys(this.apiCall);\n this.individualKeys = {};\n this._presets = new Presets(this.apiCall);\n this.individualPresets = {};\n this._stopwords = new Stopwords(this.apiCall);\n this.individualStopwords = {};\n this.analytics = new Analytics(this.apiCall);\n this.stemming = new Stemming(this.apiCall);\n this._conversations = new Conversations(this.apiCall);\n this.individualConversations = {};\n }\n\n collections(): Collections;\n collections = object>(\n collectionName: string,\n ): Collection;\n collections(collectionName?: string): Collections | Collection {\n if (collectionName === undefined) {\n return this._collections;\n } else {\n if (this.individualCollections[collectionName] === undefined) {\n this.individualCollections[collectionName] = new Collection(\n collectionName,\n this.apiCall,\n this.configuration,\n );\n }\n return this.individualCollections[collectionName];\n }\n }\n\n aliases(): Aliases;\n aliases(aliasName: string): Alias;\n aliases(aliasName?: string): Aliases | Alias {\n if (aliasName === undefined) {\n return this._aliases;\n } else {\n if (this.individualAliases[aliasName] === undefined) {\n this.individualAliases[aliasName] = new Alias(aliasName, this.apiCall);\n }\n return this.individualAliases[aliasName];\n }\n }\n\n keys(): Keys;\n keys(id: number): Key;\n keys(id?: number): Keys | Key {\n if (id === undefined) {\n return this._keys;\n } else {\n if (this.individualKeys[id] === undefined) {\n this.individualKeys[id] = new Key(id, this.apiCall);\n }\n return this.individualKeys[id];\n }\n }\n\n presets(): Presets;\n presets(id: string): Preset;\n presets(id?: string): Presets | Preset {\n if (id === undefined) {\n return this._presets;\n } else {\n if (this.individualPresets[id] === undefined) {\n this.individualPresets[id] = new Preset(id, this.apiCall);\n }\n return this.individualPresets[id];\n }\n }\n\n stopwords(): Stopwords;\n stopwords(id: string): Stopword;\n stopwords(id?: string): Stopwords | Stopword {\n if (id === undefined) {\n return this._stopwords;\n } else {\n if (this.individualStopwords[id] === undefined) {\n this.individualStopwords[id] = new Stopword(id, this.apiCall);\n }\n return this.individualStopwords[id];\n }\n }\n\n conversations(): Conversations;\n conversations(id: string): Conversation;\n conversations(id?: string): Conversations | Conversation {\n if (id === undefined) {\n return this._conversations;\n } else {\n if (this.individualConversations[id] === undefined) {\n this.individualConversations[id] = new Conversation(id, this.apiCall);\n }\n return this.individualConversations[id];\n }\n }\n}\n"]} \ No newline at end of file diff --git a/lib/Typesense.js.map b/lib/Typesense.js.map deleted file mode 100644 index c57cc5ba..00000000 --- a/lib/Typesense.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Typesense.js","sourceRoot":"","sources":["../src/Typesense.ts"],"names":[],"mappings":";;;;AAAA,oFAAoD;AAG3C,uBAHF,sBAAY,CAGE;AAFrB,wEAAwC;AAG/B,iBAHF,gBAAM,CAGE;AACf,qEAA6C"} \ No newline at end of file diff --git a/lib/Typesense.d.ts b/lib/index.d.ts similarity index 100% rename from lib/Typesense.d.ts rename to lib/index.d.ts diff --git a/lib/Typesense.js b/lib/index.js similarity index 92% rename from lib/Typesense.js rename to lib/index.js index e8b76e2c..b0ba0d75 100644 --- a/lib/Typesense.js +++ b/lib/index.js @@ -7,4 +7,4 @@ exports.SearchClient = SearchClient_1.default; const Client_1 = tslib_1.__importDefault(require("./Typesense/Client")); exports.Client = Client_1.default; exports.Errors = tslib_1.__importStar(require("./Typesense/Errors")); -//# sourceMappingURL=Typesense.js.map \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/index.js.map b/lib/index.js.map new file mode 100644 index 00000000..c1d26729 --- /dev/null +++ b/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,oFAAoD;AAG3C,uBAHF,sBAAY,CAGE;AAFrB,wEAAwC;AAG/B,iBAHF,gBAAM,CAGE;AACf,qEAA6C"} \ No newline at end of file diff --git a/package.json b/package.json index 84acd775..74ec559b 100644 --- a/package.json +++ b/package.json @@ -27,17 +27,17 @@ }, "exports": { ".": { - "types": "./lib/Typesense.d.ts", - "default": "./lib/Typesense.js" + "types": "./lib/index.d.ts", + "default": "./lib/index.js" }, "./lib/Typesense/*": { "types": "./lib/Typesense/*.d.ts", "default": "./lib/Typesense/*.js" }, "./dist": { - "types": "./dist/typesense.d.ts", - "import": "./dist/typesense.min.mjs", - "require": "./dist/typesense.min.js" + "types": "./dist/index.d.ts", + "import": "./dist/index.min.mjs", + "require": "./dist/index.min.js" } }, "files": [ diff --git a/src/Typesense.ts b/src/index.ts similarity index 100% rename from src/Typesense.ts rename to src/index.ts diff --git a/tsup.config.ts b/tsup.config.ts index 01824457..c1a9bb6e 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -5,9 +5,7 @@ import { nodeModulesPolyfillPlugin } from "esbuild-plugins-node-modules-polyfill const baseOptions: Options = { target: browserList(["defaults"]) as Options["target"], - entry: { - typesense: "src/Typesense.ts", - }, + entry: ["src/index.ts"], clean: true, format: ["cjs", "esm"], outDir: "dist", @@ -32,12 +30,14 @@ const baseOptions: Options = { }; export default defineConfig([ + // minified { ...baseOptions, sourcemap: true, minify: true, dts: true, }, + // un-minified { ...baseOptions, minify: false, From 68f42a9b5dffdf665598395773542b0acc028c02 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Wed, 5 Feb 2025 16:38:07 +0200 Subject: [PATCH 40/45] fix(documents): throw on empty lists of documents --- src/Typesense/Documents.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Typesense/Documents.ts b/src/Typesense/Documents.ts index ad8887d8..0aff0232 100644 --- a/src/Typesense/Documents.ts +++ b/src/Typesense/Documents.ts @@ -1,7 +1,7 @@ import type { ReadStream } from "fs"; import ApiCall from "./ApiCall"; import Configuration from "./Configuration"; -import { ImportError } from "./Errors"; +import { ImportError, RequestMalformed } from "./Errors"; import { SearchOnlyDocuments } from "./SearchOnlyDocuments"; // Todo: use generic to extract filter_by values @@ -394,6 +394,9 @@ export default class Documents ): Promise { let documentsInJSONLFormat; if (Array.isArray(documents)) { + if (documents.length === 0) { + throw new RequestMalformed("No documents provided"); + } try { documentsInJSONLFormat = documents .map((document) => JSON.stringify(document)) @@ -416,6 +419,9 @@ export default class Documents } } else { documentsInJSONLFormat = documents; + if (isEmptyString(documentsInJSONLFormat)) { + throw new RequestMalformed("No documents provided"); + } } const resultsInJSONLFormat = await this.apiCall.performRequest( @@ -520,3 +526,7 @@ export default class Documents }); } } + +function isEmptyString(str: string | null | undefined): boolean { + return str == null || str === "" || str.length === 0; +} From e5aaf4b9676e2996db2581a0e480763faec383cc Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Thu, 6 Feb 2025 11:10:51 +0200 Subject: [PATCH 41/45] test(documents): add tests for empty document validation - add test for empty array input - add test for empty string input - add test for null input - add test for undefined input --- test/Typesense/Documents.spec.js | 59 ++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/test/Typesense/Documents.spec.js b/test/Typesense/Documents.spec.js index 6b9c0032..c09a324f 100644 --- a/test/Typesense/Documents.spec.js +++ b/test/Typesense/Documents.spec.js @@ -436,6 +436,65 @@ describe("Documents", function () { }); describe(".import", function () { + context("when an empty array of documents is passed", function () { + it("throws RequestMalformed error", function (done) { + documents + .import([]) + .then(() => { + done(new Error("Expected import to throw RequestMalformed error")); + }) + .catch((error) => { + expect(error.constructor.name).to.eq("RequestMalformed"); + expect(error.message).to.eq("No documents provided"); + done(); + }); + }); + }); + + context("when an empty string is passed", function () { + it("throws RequestMalformed error", function (done) { + documents + .import("") + .then(() => { + done(new Error("Expected import to throw RequestMalformed error")); + }) + .catch((error) => { + expect(error.constructor.name).to.eq("RequestMalformed"); + expect(error.message).to.eq("No documents provided"); + done(); + }); + }); + }); + + context("when null is passed as JSONL string", function () { + it("throws RequestMalformed error", function (done) { + documents + .import(null) + .then(() => { + done(new Error("Expected import to throw RequestMalformed error")); + }) + .catch((error) => { + expect(error.constructor.name).to.eq("RequestMalformed"); + expect(error.message).to.eq("No documents provided"); + done(); + }); + }); + }); + + context("when undefined is passed as JSONL string", function () { + it("throws RequestMalformed error", function (done) { + documents + .import(undefined) + .then(() => { + done(new Error("Expected import to throw RequestMalformed error")); + }) + .catch((error) => { + expect(error.constructor.name).to.eq("RequestMalformed"); + expect(error.message).to.eq("No documents provided"); + done(); + }); + }); + }); context("when a query paramater is passed", function () { it("passes the query parameter to the API", function (done) { mockAxios From c9aab29f9fcbbfd6604045ae5d4e688de339df89 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Fri, 7 Feb 2025 15:27:38 +0200 Subject: [PATCH 42/45] chore: fix import paths in tests --- test/Typesense.spec.js | 2 +- test/Typesense/Alias.spec.js | 2 +- test/Typesense/Aliases.spec.js | 2 +- test/Typesense/AnalyticsEvents.spec.js | 2 +- test/Typesense/AnalyticsRule.spec.js | 10 +++++----- test/Typesense/AnalyticsRules.spec.js | 2 +- test/Typesense/ApiCall.spec.js | 2 +- test/Typesense/Client.spec.js | 4 ++-- test/Typesense/Collection.spec.js | 14 +++++++------- test/Typesense/Collections.spec.js | 2 +- test/Typesense/Configuration.spec.js | 4 ++-- test/Typesense/Conversation.spec.js | 2 +- test/Typesense/ConversationModel.spec.js | 2 +- test/Typesense/ConversationModels.spec.js | 2 +- test/Typesense/Conversations.spec.js | 2 +- test/Typesense/Debug.spec.js | 4 ++-- test/Typesense/Document.spec.js | 14 +++++++------- test/Typesense/Documents.spec.js | 2 +- test/Typesense/Health.spec.js | 4 ++-- test/Typesense/Key.spec.js | 6 +++--- test/Typesense/Keys.spec.js | 6 +++--- test/Typesense/Metrics.spec.js | 4 ++-- test/Typesense/MultiSearch.spec.js | 2 +- test/Typesense/Operations.spec.js | 6 +++--- test/Typesense/Override.spec.js | 10 +++++----- test/Typesense/Overrides.spec.js | 10 +++++----- test/Typesense/Preset.spec.js | 6 +++--- test/Typesense/Presets.spec.js | 2 +- test/Typesense/SearchClient.spec.js | 12 ++++++------ test/Typesense/Stats.spec.js | 2 +- test/Typesense/StemmingDictionaries.spec.js | 2 +- test/Typesense/StemmingDictionary.spec.js | 2 +- test/Typesense/Stopword.spec.js | 2 +- test/Typesense/Stopwords.spec.js | 2 +- test/Typesense/Synonym.spec.js | 10 +++++----- test/Typesense/Synonyms.spec.js | 10 +++++----- 36 files changed, 86 insertions(+), 86 deletions(-) diff --git a/test/Typesense.spec.js b/test/Typesense.spec.js index cb66bdbd..7afe1ce6 100644 --- a/test/Typesense.spec.js +++ b/test/Typesense.spec.js @@ -3,7 +3,7 @@ import { Client as TypesenseClient, SearchClient as TypesenseSearchClient, Errors, -} from "../src/Typesense"; +} from "../src/index"; let expect = chai.expect; diff --git a/test/Typesense/Alias.spec.js b/test/Typesense/Alias.spec.js index 836ec568..464b02f8 100644 --- a/test/Typesense/Alias.spec.js +++ b/test/Typesense/Alias.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/Aliases.spec.js b/test/Typesense/Aliases.spec.js index 9b3fee98..2ffefce2 100644 --- a/test/Typesense/Aliases.spec.js +++ b/test/Typesense/Aliases.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/AnalyticsEvents.spec.js b/test/Typesense/AnalyticsEvents.spec.js index b9df9971..2d2cad68 100644 --- a/test/Typesense/AnalyticsEvents.spec.js +++ b/test/Typesense/AnalyticsEvents.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/AnalyticsRule.spec.js b/test/Typesense/AnalyticsRule.spec.js index e93f4167..8b026f68 100644 --- a/test/Typesense/AnalyticsRule.spec.js +++ b/test/Typesense/AnalyticsRule.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -36,14 +36,14 @@ describe("AnalyticsRule", function () { .onGet( apiCall.uriFor( "/analytics/rules/123", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), null, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, "{}", { "content-type": "application/json" }); @@ -61,14 +61,14 @@ describe("AnalyticsRule", function () { .onDelete( apiCall.uriFor( "/analytics/rules/123", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), null, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, {}); diff --git a/test/Typesense/AnalyticsRules.spec.js b/test/Typesense/AnalyticsRules.spec.js index adb63e16..bbbe45d6 100644 --- a/test/Typesense/AnalyticsRules.spec.js +++ b/test/Typesense/AnalyticsRules.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/ApiCall.spec.js b/test/Typesense/ApiCall.spec.js index 0150b49a..f71b57c6 100644 --- a/test/Typesense/ApiCall.spec.js +++ b/test/Typesense/ApiCall.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import { ObjectUnprocessable } from "../../src/Typesense/Errors"; import axios from "axios"; diff --git a/test/Typesense/Client.spec.js b/test/Typesense/Client.spec.js index c7d1de3b..48214382 100644 --- a/test/Typesense/Client.spec.js +++ b/test/Typesense/Client.spec.js @@ -1,5 +1,5 @@ import chai from "chai"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; let expect = chai.expect; @@ -47,7 +47,7 @@ describe("Client", function () { }, }); expect( - typesense.configuration.additionalHeaders["CF-Access-Client-Id"] + typesense.configuration.additionalHeaders["CF-Access-Client-Id"], ).to.eql("abcd"); done(); }); diff --git a/test/Typesense/Collection.spec.js b/test/Typesense/Collection.spec.js index da4169a1..fc14d583 100644 --- a/test/Typesense/Collection.spec.js +++ b/test/Typesense/Collection.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -64,14 +64,14 @@ describe("Collection", function () { .onGet( apiCall.uriFor( "/collections/companies", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), null, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, JSON.stringify(companySchema), { "content-type": "application/json", @@ -92,14 +92,14 @@ describe("Collection", function () { .onPatch( apiCall.uriFor( "/collections/companies", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), updateSchema, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, JSON.stringify(updateSchema), { "content-type": "application/json", @@ -117,14 +117,14 @@ describe("Collection", function () { .onDelete( apiCall.uriFor( "/collections/companies", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), null, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, JSON.stringify(companySchema), { "content-type": "application/json", diff --git a/test/Typesense/Collections.spec.js b/test/Typesense/Collections.spec.js index 6a27d030..bf88f346 100644 --- a/test/Typesense/Collections.spec.js +++ b/test/Typesense/Collections.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/Configuration.spec.js b/test/Typesense/Configuration.spec.js index 1a4043ed..6c1f26fc 100644 --- a/test/Typesense/Configuration.spec.js +++ b/test/Typesense/Configuration.spec.js @@ -1,5 +1,5 @@ import chai from "chai"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import { MissingConfigurationError } from "../../src/Typesense/Errors"; let expect = chai.expect; @@ -106,7 +106,7 @@ describe("Configuration", function () { randomizeNodes: false, }); expect(typesense.configuration.nodes[0].url).to.equal( - "https://example.net/" + "https://example.net/", ); }).to.not.throw(MissingConfigurationError); diff --git a/test/Typesense/Conversation.spec.js b/test/Typesense/Conversation.spec.js index a382758c..cf37a7cc 100644 --- a/test/Typesense/Conversation.spec.js +++ b/test/Typesense/Conversation.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/ConversationModel.spec.js b/test/Typesense/ConversationModel.spec.js index b5e44b6b..463dab3f 100644 --- a/test/Typesense/ConversationModel.spec.js +++ b/test/Typesense/ConversationModel.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/ConversationModels.spec.js b/test/Typesense/ConversationModels.spec.js index 89c2b985..c57e7b33 100644 --- a/test/Typesense/ConversationModels.spec.js +++ b/test/Typesense/ConversationModels.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/Conversations.spec.js b/test/Typesense/Conversations.spec.js index 9a89779c..137e88cb 100644 --- a/test/Typesense/Conversations.spec.js +++ b/test/Typesense/Conversations.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/Debug.spec.js b/test/Typesense/Debug.spec.js index 3ef527cd..8a42d4b1 100644 --- a/test/Typesense/Debug.spec.js +++ b/test/Typesense/Debug.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -39,7 +39,7 @@ describe("Debug", function () { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, JSON.stringify(debugInfo), { "content-type": "application/json", diff --git a/test/Typesense/Document.spec.js b/test/Typesense/Document.spec.js index 5e070724..e4ae0ab3 100644 --- a/test/Typesense/Document.spec.js +++ b/test/Typesense/Document.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -42,14 +42,14 @@ describe("Document", function () { .onGet( apiCall.uriFor( "/collections/companies/documents/124", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), null, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, JSON.stringify(documentResult), { "content-type": "application/json", @@ -71,14 +71,14 @@ describe("Document", function () { .onPatch( apiCall.uriFor( "/collections/companies/documents/124", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), partialDocument, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply((config) => { expect(config.params.dirty_values).to.equal("coerce_or_reject"); @@ -103,14 +103,14 @@ describe("Document", function () { .onDelete( apiCall.uriFor( "/collections/companies/documents/124", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), null, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, JSON.stringify(documentResult), { "content-type": "application/json", diff --git a/test/Typesense/Documents.spec.js b/test/Typesense/Documents.spec.js index c09a324f..233466a3 100644 --- a/test/Typesense/Documents.spec.js +++ b/test/Typesense/Documents.spec.js @@ -1,7 +1,7 @@ import fs from "fs"; import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/Health.spec.js b/test/Typesense/Health.spec.js index 7eec87ae..da864608 100644 --- a/test/Typesense/Health.spec.js +++ b/test/Typesense/Health.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -38,7 +38,7 @@ describe("Health", function () { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, JSON.stringify({ ok: true }), { "content-type": "application/json", diff --git a/test/Typesense/Key.spec.js b/test/Typesense/Key.spec.js index b2dc0708..9d7c7806 100644 --- a/test/Typesense/Key.spec.js +++ b/test/Typesense/Key.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -40,7 +40,7 @@ describe("Key", function () { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, "{}", { "content-type": "application/json" }); @@ -62,7 +62,7 @@ describe("Key", function () { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, {}); diff --git a/test/Typesense/Keys.spec.js b/test/Typesense/Keys.spec.js index 8f972b4b..a153b92f 100644 --- a/test/Typesense/Keys.spec.js +++ b/test/Typesense/Keys.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -44,7 +44,7 @@ describe("Keys", function () { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(201, "{}", { "content-type": "application/json" }); @@ -68,7 +68,7 @@ describe("Keys", function () { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, "[]", { "content-type": "application/json" }); diff --git a/test/Typesense/Metrics.spec.js b/test/Typesense/Metrics.spec.js index 76ba3143..c174fc5d 100644 --- a/test/Typesense/Metrics.spec.js +++ b/test/Typesense/Metrics.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -38,7 +38,7 @@ describe("Metrics", function () { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, "{}", { "content-type": "application/json" }); diff --git a/test/Typesense/MultiSearch.spec.js b/test/Typesense/MultiSearch.spec.js index 700611e8..fb87446c 100644 --- a/test/Typesense/MultiSearch.spec.js +++ b/test/Typesense/MultiSearch.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/Operations.spec.js b/test/Typesense/Operations.spec.js index a2da96af..51e79afb 100644 --- a/test/Typesense/Operations.spec.js +++ b/test/Typesense/Operations.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -34,14 +34,14 @@ describe("Operations", function () { .onPost( apiCall.uriFor( "/operations/snapshot", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), undefined, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply((config) => { expect(config.params.snapshot_path).to.equal("/tmp/dbsnap"); diff --git a/test/Typesense/Override.spec.js b/test/Typesense/Override.spec.js index b4d77aa2..f6807b96 100644 --- a/test/Typesense/Override.spec.js +++ b/test/Typesense/Override.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -49,14 +49,14 @@ describe("Override", function () { .onGet( apiCall.uriFor( "/collections/companies/overrides/lex-exact", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), undefined, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, JSON.stringify(overrideData), { "content-type": "application/json", @@ -74,14 +74,14 @@ describe("Override", function () { .onDelete( apiCall.uriFor( "/collections/companies/overrides/lex-exact", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), undefined, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, JSON.stringify(stubbedResult), { "content-type": "application/json", diff --git a/test/Typesense/Overrides.spec.js b/test/Typesense/Overrides.spec.js index 49a000f6..76613d4c 100644 --- a/test/Typesense/Overrides.spec.js +++ b/test/Typesense/Overrides.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -49,14 +49,14 @@ describe("Overrides", function () { .onPut( apiCall.uriFor( "/collections/companies/overrides/lex-exact", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), override, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(201, JSON.stringify(override), { "content-type": "application/json", @@ -73,14 +73,14 @@ describe("Overrides", function () { .onGet( apiCall.uriFor( "/collections/companies/overrides", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), undefined, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, JSON.stringify([override]), { "content-type": "application/json", diff --git a/test/Typesense/Preset.spec.js b/test/Typesense/Preset.spec.js index 2f15cbd6..f4e3be0a 100644 --- a/test/Typesense/Preset.spec.js +++ b/test/Typesense/Preset.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -40,7 +40,7 @@ describe("Preset", function () { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, "{}", { "content-type": "application/json" }); @@ -62,7 +62,7 @@ describe("Preset", function () { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, {}); diff --git a/test/Typesense/Presets.spec.js b/test/Typesense/Presets.spec.js index d2aed06c..d0c31a28 100644 --- a/test/Typesense/Presets.spec.js +++ b/test/Typesense/Presets.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/SearchClient.spec.js b/test/Typesense/SearchClient.spec.js index 98476e46..6cac13f3 100644 --- a/test/Typesense/SearchClient.spec.js +++ b/test/Typesense/SearchClient.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { SearchClient as TypesenseSearchClient } from "../../src/Typesense"; +import { SearchClient as TypesenseSearchClient } from "../../src/index"; import MockAxiosAdapter from "axios-mock-adapter"; import axios from "axios"; import ApiCall from "../../src/Typesense/ApiCall"; @@ -47,7 +47,7 @@ describe("SearchClient", function () { }); it("should only expose the search endpoints", function (done) { expect(typesense.collections).to.throw( - "Typesense.SearchClient only supports search operations" + "Typesense.SearchClient only supports search operations", ); expect(typesense.collections("xyz").documents().search).to.be.a("function"); expect(typesense.multiSearch.perform).to.be.a("function"); @@ -87,7 +87,7 @@ describe("SearchClient", function () { Accept: "application/json, text/plain, */*", "Content-Type": "text/plain", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply((config) => { expect(config.params["x-typesense-api-key"]).to.eq(undefined); @@ -132,8 +132,8 @@ describe("SearchClient", function () { .onGet( apiCall.uriFor( "/collections/companies/documents/search", - typesense.configuration.nodes[0] - ) + typesense.configuration.nodes[0], + ), ) .reply(200, JSON.stringify(stubbedSearchResults[i]), { "content-type": "application/json", @@ -167,7 +167,7 @@ describe("SearchClient", function () { searchRequests.forEach((_, i) => { mockAxios .onPost( - apiCall.uriFor("/multi_search", typesense.configuration.nodes[0]) + apiCall.uriFor("/multi_search", typesense.configuration.nodes[0]), ) // eslint-disable-next-line @typescript-eslint/no-unused-vars .reply((config) => { diff --git a/test/Typesense/Stats.spec.js b/test/Typesense/Stats.spec.js index def1e5c1..7b34f533 100644 --- a/test/Typesense/Stats.spec.js +++ b/test/Typesense/Stats.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/StemmingDictionaries.spec.js b/test/Typesense/StemmingDictionaries.spec.js index fb2807b5..6f3b0bc4 100644 --- a/test/Typesense/StemmingDictionaries.spec.js +++ b/test/Typesense/StemmingDictionaries.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/StemmingDictionary.spec.js b/test/Typesense/StemmingDictionary.spec.js index e86bb5a1..694eb38e 100644 --- a/test/Typesense/StemmingDictionary.spec.js +++ b/test/Typesense/StemmingDictionary.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/Stopword.spec.js b/test/Typesense/Stopword.spec.js index 230aeb8e..ed49af5d 100644 --- a/test/Typesense/Stopword.spec.js +++ b/test/Typesense/Stopword.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/Stopwords.spec.js b/test/Typesense/Stopwords.spec.js index 2b58d1d5..99fd1c1a 100644 --- a/test/Typesense/Stopwords.spec.js +++ b/test/Typesense/Stopwords.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; diff --git a/test/Typesense/Synonym.spec.js b/test/Typesense/Synonym.spec.js index 350bfdc7..9960aadb 100644 --- a/test/Typesense/Synonym.spec.js +++ b/test/Typesense/Synonym.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -38,14 +38,14 @@ describe("Synonym", function () { .onGet( apiCall.uriFor( "/collections/companies/synonyms/synonym-set-1", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), undefined, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, "{}", { "content-type": "application/json" }); @@ -60,14 +60,14 @@ describe("Synonym", function () { .onDelete( apiCall.uriFor( "/collections/companies/synonyms/synonym-set-1", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), undefined, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, "{}", { "content-type": "application/json" }); diff --git a/test/Typesense/Synonyms.spec.js b/test/Typesense/Synonyms.spec.js index 89c7d665..fa652dfe 100644 --- a/test/Typesense/Synonyms.spec.js +++ b/test/Typesense/Synonyms.spec.js @@ -1,6 +1,6 @@ import chai from "chai"; import chaiAsPromised from "chai-as-promised"; -import { Client as TypesenseClient } from "../../src/Typesense"; +import { Client as TypesenseClient } from "../../src/index"; import ApiCall from "../../src/Typesense/ApiCall"; import axios from "axios"; import MockAxiosAdapter from "axios-mock-adapter"; @@ -39,14 +39,14 @@ describe("Synonyms", function () { .onPut( apiCall.uriFor( "/collections/companies/synonyms/synonym-set-1", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), synonym, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(201, "{}", { "content-type": "application/json" }); @@ -61,14 +61,14 @@ describe("Synonyms", function () { .onGet( apiCall.uriFor( "/collections/companies/synonyms", - typesense.configuration.nodes[0] + typesense.configuration.nodes[0], ), undefined, { Accept: "application/json, text/plain, */*", "Content-Type": "application/json", "X-TYPESENSE-API-KEY": typesense.configuration.apiKey, - } + }, ) .reply(200, JSON.stringify([]), { "content-type": "application/json" }); From 1d7088fdb995c60b50cdedaf3bddb4e020a131c8 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Fri, 7 Feb 2025 15:40:49 +0200 Subject: [PATCH 43/45] chore: remove webpack from dependencies --- package-lock.json | 283 ++++++++-------------------------------------- package.json | 4 +- webpack.config.js | 33 ------ 3 files changed, 51 insertions(+), 269 deletions(-) delete mode 100644 webpack.config.js diff --git a/package-lock.json b/package-lock.json index cc0e7265..6f14e232 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,9 +58,7 @@ "tsup": "^8.2.4", "typescript": "^5.2.2", "vinyl-buffer": "^1.0.1", - "vinyl-source-stream": "^2.0.0", - "webpack": "^5.89.0", - "webpack-cli": "^5.1.4" + "vinyl-source-stream": "^2.0.0" }, "engines": { "node": ">=18" @@ -1915,15 +1913,6 @@ "node": ">=6.9.0" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", @@ -2707,6 +2696,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -3389,6 +3379,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -3398,25 +3389,29 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -3427,13 +3422,15 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -3446,6 +3443,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, + "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -3455,6 +3453,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, + "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -3463,13 +3462,15 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -3486,6 +3487,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", @@ -3499,6 +3501,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -3511,6 +3514,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", @@ -3525,66 +3529,25 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, - "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/acorn": { "version": "8.11.3", @@ -3603,6 +3566,7 @@ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, + "peer": true, "peerDependencies": { "acorn": "^8" } @@ -3724,6 +3688,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "peer": true, "peerDependencies": { "ajv": "^6.9.1" } @@ -4773,6 +4738,7 @@ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, + "peer": true, "engines": { "node": ">=6.0" } @@ -4889,12 +4855,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, "node_modules/combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", @@ -5481,18 +5441,6 @@ "node": ">=10.13.0" } }, - "node_modules/envinfo": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", - "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -5559,7 +5507,8 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", - "dev": true + "dev": true, + "peer": true }, "node_modules/es-set-tostringtag": { "version": "2.0.2", @@ -6662,15 +6611,6 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } - }, "node_modules/fastq": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", @@ -7018,7 +6958,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.11", @@ -7389,37 +7330,6 @@ "node": ">=4" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -7507,15 +7417,6 @@ "node": ">= 0.4" } }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -8168,6 +8069,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -8182,6 +8084,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -8191,6 +8094,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8252,7 +8156,8 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "peer": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -8379,6 +8284,7 @@ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "peer": true, "engines": { "node": ">=6.11.5" } @@ -9153,7 +9059,8 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/next-tick": { "version": "1.1.0", @@ -10217,18 +10124,6 @@ "node": ">=8.10.0" } }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -10397,18 +10292,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -11250,6 +11133,7 @@ "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -11268,6 +11152,7 @@ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -11302,6 +11187,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -11319,7 +11205,8 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/test-exclude": { "version": "6.0.0", @@ -12283,6 +12170,7 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, + "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -12303,6 +12191,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, + "peer": true, "dependencies": { "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", @@ -12344,79 +12233,12 @@ } } }, - "node_modules/webpack-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.1.1", - "@webpack-cli/info": "^2.0.2", - "@webpack-cli/serve": "^2.0.5", - "colorette": "^2.0.14", - "commander": "^10.0.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, + "peer": true, "engines": { "node": ">=10.13.0" } @@ -12426,6 +12248,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -12507,12 +12330,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, "node_modules/workerpool": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", diff --git a/package.json b/package.json index 74ec559b..9b61f3c9 100644 --- a/package.json +++ b/package.json @@ -98,9 +98,7 @@ "tsup": "^8.2.4", "typescript": "^5.2.2", "vinyl-buffer": "^1.0.1", - "vinyl-source-stream": "^2.0.0", - "webpack": "^5.89.0", - "webpack-cli": "^5.1.4" + "vinyl-source-stream": "^2.0.0" }, "scripts": { "format": "prettier --write \"(src|test|doc)/**/*.(ts|json|js)\"", diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 5309764e..00000000 --- a/webpack.config.js +++ /dev/null @@ -1,33 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ - -const path = require("path"); - -module.exports = (env, argv) => { - return { - entry: "./src/Typesense.ts", - target: "web", - mode: argv.mode, - module: { - rules: [ - { - test: /\.ts$/, - exclude: /node_modules/, - use: { - loader: "babel-loader", - }, - }, - ], - }, - resolve: { - extensions: [".tsx", ".ts", ".js"], - }, - output: { - filename: `typesense${ - argv && argv.mode === "production" ? ".min" : "" - }.js`, - path: path.resolve(__dirname, "dist"), - library: "Typesense", - }, - devtool: "source-map", - }; -}; From e9f09aa9f9d8fa68da8de1d7bb84cfed6568234e Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Fri, 9 May 2025 14:31:27 +0300 Subject: [PATCH 44/45] fix(test): fix import to use barrel export --- test/setup.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/setup.ts b/test/setup.ts index f154bc57..ce28474c 100644 --- a/test/setup.ts +++ b/test/setup.ts @@ -1,5 +1,5 @@ import "dotenv/config"; -import { Client } from "../src/Typesense"; +import { Client } from "../src"; import type { CollectionCreateSchema } from "../src/Typesense/Collections"; import { ObjectAlreadyExists } from "../src/Typesense/Errors"; import { essays } from "./essays"; From a6849349c55abf0d1ce3b0a0eff028e67fb489f1 Mon Sep 17 00:00:00 2001 From: Fanis Tharropoulos Date: Thu, 29 May 2025 11:43:15 +0300 Subject: [PATCH 45/45] build: add main export for parcel --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index ab91f09d..1be50df7 100644 --- a/package.json +++ b/package.json @@ -25,10 +25,12 @@ "http": false, "https": false }, + "main": "./dist/index.js", "exports": { ".": { "types": "./lib/index.d.ts", - "default": "./lib/index.js" + "import": "./dist/index.min.mjs", + "require": "./lib/index.js" }, "./lib/Typesense/*": { "types": "./lib/Typesense/*.d.ts",