{"version":3,"file":"appbase-js.umd.min.js","sources":["../node_modules/url-parser-lite/index.js","../src/utils/index.js","../src/core/index.js","../node_modules/querystring/decode.js","../node_modules/querystring/encode.js","../node_modules/querystring/index.js","../node_modules/cross-fetch/dist/browser-ponyfill.js","../src/core/request/fetch.js","../src/core/api/index.js","../src/core/api/get.js","../src/core/api/update.js","../src/core/api/delete.js","../src/core/api/bulk.js","../src/core/api/search.js","../src/core/api/msearch.js","../src/core/api/reactiveSearchApi.js","../src/core/api/reactiveSearchv3Api.js","../src/core/api/getMappings.js","../src/core/api/getSuggestionsv3Api.js","../src/index.js"],"sourcesContent":["function URL(url) {\n var pattern = RegExp(\"^(([^:/?#]*)?://)?(((.*)?@)?([^/?#]*)?)([^?#]*)(\\\\?([^#]*))?(#(.*))?\");\n var matches = url.match(pattern);\n\n return {\n protocol: matches[2],\n auth: matches[5],\n host: matches[6],\n path: matches[7],\n query: matches[9],\n hash: matches[11]\n };\n}\n\nmodule.exports = URL;\n","export function contains(string, substring) {\n return string.indexOf(substring) !== -1;\n}\nexport function isAppbase(url) {\n return contains(url, 'scalr.api.appbase.io');\n}\nexport function btoa(input = '') {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n const str = input;\n let output = '';\n\n // eslint-disable-next-line\n for (\n let block = 0, charCode, i = 0, map = chars;\n str.charAt(i | 0) || ((map = '='), i % 1); // eslint-disable-line no-bitwise\n output += map.charAt(63 & (block >> (8 - (i % 1) * 8))) // eslint-disable-line no-bitwise\n ) {\n charCode = str.charCodeAt((i += 3 / 4));\n\n if (charCode > 0xff) {\n throw new Error(\n '\"btoa\" failed: The string to be encoded contains characters outside of the Latin1 range.',\n );\n }\n\n block = (block << 8) | charCode; // eslint-disable-line no-bitwise\n }\n\n return output;\n}\nexport function uuidv4() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0; // eslint-disable-line no-bitwise\n\n const v = c === 'x' ? r : (r & 0x3) | 0x8; // eslint-disable-line no-bitwise\n return v.toString(16);\n });\n}\n\nexport function validateRSQuery(query) {\n if (query && Object.prototype.toString.call(query) === '[object Array]') {\n for (let i = 0; i < query.length; i += 1) {\n const q = query[i];\n if (q) {\n if (!q.id) {\n return new Error(\"'id' field must be present in query object\");\n }\n } else {\n return new Error('query object can not have an empty value');\n }\n }\n return true;\n }\n return new Error(\"invalid query value, 'query' value must be an array\");\n}\n\nexport function validate(object, fields) {\n const invalid = [];\n const emptyFor = {\n object: null,\n string: '',\n number: 0,\n };\n const keys = Object.keys(fields);\n keys.forEach((key) => {\n const types = fields[key].split('|');\n const matchedType = types.find(\n type =>\n // eslint-disable-next-line\n typeof object[key] === type\n );\n if (!matchedType || object[key] === emptyFor[matchedType]) {\n invalid.push(key);\n }\n });\n let missing = '';\n for (let i = 0; i < invalid.length; i += 1) {\n missing += `${invalid[i]}, `;\n }\n if (invalid.length > 0) {\n return new Error(`fields missing: ${missing}`);\n }\n\n return true;\n}\n\nexport function removeUndefined(value = {}) {\n if (\n value\n || !(Object.keys(value).length === 0 && value.constructor === Object)\n ) {\n return JSON.parse(JSON.stringify(value));\n }\n return null;\n}\n\n/**\n * Send only when a connection is opened\n * @param {Object} socket\n * @param {Function} callback\n */\nexport function waitForSocketConnection(socket, callback) {\n setTimeout(() => {\n if (socket.readyState === 1) {\n if (callback != null) {\n callback();\n }\n } else {\n waitForSocketConnection(socket, callback);\n }\n }, 5); // wait 5 ms for the connection...\n}\n\nexport function encodeHeaders(headers = {}, shouldEncode = true) {\n // Encode headers\n let encodedHeaders = {};\n if (shouldEncode) {\n Object.keys(headers).forEach((header) => {\n encodedHeaders[header] = encodeURI(headers[header]);\n });\n } else {\n encodedHeaders = headers;\n }\n return encodedHeaders;\n}\nexport function getMongoRequest(app, mongo) {\n const mongodb = {};\n if (app) {\n mongodb.index = app;\n }\n if (mongo) {\n if (mongo.db) {\n mongodb.db = mongo.db;\n }\n if (mongo.collection) {\n mongodb.collection = mongo.collection;\n }\n }\n return mongodb;\n }\n\nexport function getTelemetryHeaders(enableTelemetry) {\n const headers = {};\n Object.assign(headers, {\n 'X-Search-Client': 'Appbase JS',\n });\n if (enableTelemetry === false) {\n Object.assign(headers, {\n 'X-Enable-Telemetry': enableTelemetry,\n });\n }\n\n return headers;\n}\n","import URL from 'url-parser-lite';\nimport { isAppbase } from '../utils/index';\n/**\n * Returns an instance of Appbase client\n * @param {Object} config To configure properties\n * @param {String} config.url\n * @param {String} config.app\n * @param {String} config.credentials\n * @param {String} config.username\n * @param {String} config.password\n * @param {Boolean} config.enableTelemetry\n * @param {Object} config.mongodb\n * A callback function which will be invoked before a fetch request made\n */\nfunction AppBase(config) {\n const {\n auth = null,\n host = '',\n path = '',\n protocol = '',\n } = URL(config.url || '');\n let { url } = config;\n\n // Validate config and throw appropriate error\n if (typeof url !== 'string' || url === '') {\n throw new Error('URL not present in options.');\n }\n\n if (typeof protocol !== 'string' || protocol === '') {\n throw new Error(\n 'Protocol is not present in url. URL should be of the form https://appbase-demo-ansible-abxiydt-arc.searchbase.io',\n );\n }\n\n let credentials = auth || null;\n if (!config.mongodb) {\n url = host + path;\n // Parse url\n if (url.slice(-1) === '/') {\n url = url.slice(0, -1);\n }\n if (typeof config.app !== 'string' || config.app === '') {\n throw new Error('App name is not present in options.');\n }\n if (isAppbase(url) && credentials === null) {\n throw new Error(\n 'Authentication information is not present. Did you add credentials?',\n );\n }\n }\n /**\n * Credentials can be provided as a part of the URL,\n * as username, password args or as a credentials argument directly */\n if (typeof config.credentials === 'string' && config.credentials !== '') {\n // eslint-disable-next-line\n credentials = config.credentials;\n } else if (\n typeof config.username === 'string'\n && config.username !== ''\n && typeof config.password === 'string'\n && config.password !== ''\n ) {\n credentials = `${config.username}:${config.password}`;\n }\n\n\n this.mongodb = config.mongodb;\n this.url = url;\n this.protocol = protocol;\n this.app = config.app;\n this.credentials = credentials;\n this.headers = {};\n if (!this.mongodb) {\n this.headers = {\n 'X-Search-Client': 'Appbase JS',\n };\n }\n\n if (typeof config.enableTelemetry === 'boolean') {\n this.enableTelemetry = config.enableTelemetry;\n }\n}\nexport default AppBase;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","var __root__ = (function (root) {\nfunction F() { this.fetch = false; }\nF.prototype = root;\nreturn new F();\n})(typeof self !== 'undefined' ? self : this);\n(function(self) {\n\n(function(self) {\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n };\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue+','+value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) { items.push(name); });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) { items.push(value); });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) { items.push([name, value]); });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'omit';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n };\n\n function decode(body) {\n var form = new FormData();\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n var xhr = new XMLHttpRequest();\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n };\n self.fetch.polyfill = true;\n})(typeof self !== 'undefined' ? self : this);\n}).call(__root__, void(0));\nvar fetch = __root__.fetch;\nvar Response = fetch.Response = __root__.Response;\nvar Request = fetch.Request = __root__.Request;\nvar Headers = fetch.Headers = __root__.Headers;\nif (typeof module === 'object' && module.exports) {\nmodule.exports = fetch;\n// Needed for TypeScript consumers without esModuleInterop.\nmodule.exports.default = fetch;\n}\n","import querystring from 'querystring';\nimport fetch from 'cross-fetch';\nimport { btoa, removeUndefined } from '../../utils/index';\n\n/**\n * To perform fetch request\n * @param {Object} args\n * @param {String} args.method\n * @param {String} args.path\n * @param {Object} args.params\n * @param {Object} args.body\n * @param {Object} args.headers\n * @param {boolean} args.isSuggestionsAPI\n */\nfunction fetchRequest(args) {\n return new Promise((resolve, reject) => {\n const parsedArgs = removeUndefined(args);\n try {\n const {\n method, path, params, body, isRSAPI, isSuggestionsAPI,\n} = parsedArgs;\n const app = isSuggestionsAPI ? '.suggestions' : this.app;\n let bodyCopy = body;\n const contentType = path.endsWith('msearch') || path.endsWith('bulk')\n ? 'application/x-ndjson'\n : 'application/json';\n const headers = Object.assign(\n {},\n {\n Accept: 'application/json',\n 'Content-Type': contentType,\n },\n args.headers,\n this.headers,\n );\n const timestamp = Date.now();\n if (this.credentials) {\n headers.Authorization = `Basic ${btoa(this.credentials)}`;\n }\n const requestOptions = {\n method,\n headers,\n };\n if (Array.isArray(bodyCopy)) {\n let arrayBody = '';\n bodyCopy.forEach((item) => {\n arrayBody += JSON.stringify(item);\n arrayBody += '\\n';\n });\n\n bodyCopy = arrayBody;\n } else {\n bodyCopy = JSON.stringify(bodyCopy) || {};\n }\n\n if (Object.keys(bodyCopy).length !== 0) {\n requestOptions.body = bodyCopy;\n }\n\n const handleTransformRequest = (res) => {\n if (\n this.transformRequest\n && typeof this.transformRequest === 'function'\n ) {\n const tarnsformRequestPromise = this.transformRequest(res);\n return tarnsformRequestPromise instanceof Promise\n ? tarnsformRequestPromise\n : Promise.resolve(tarnsformRequestPromise);\n }\n return Promise.resolve(res);\n };\n\n let responseHeaders = {};\n\n let paramsString = '';\n if (params) {\n paramsString = `?${querystring.stringify(params)}`;\n }\n const finalURL = `${this.protocol}://${this.url}/${app}/${path}${paramsString}`;\n return handleTransformRequest(\n Object.assign(\n {},\n {\n url: finalURL,\n },\n requestOptions,\n ),\n )\n .then((ts) => {\n const transformedRequest = Object.assign({}, ts);\n const { url } = transformedRequest;\n delete transformedRequest.url;\n return fetch(url || finalURL, Object.assign({}, transformedRequest, {\n // apply timestamp header for RS API\n headers: isRSAPI\n ? Object.assign({}, transformedRequest.headers, {\n 'x-timestamp': new Date().getTime(),\n })\n : transformedRequest.headers,\n }))\n .then((res) => {\n if (res.status >= 500) {\n return reject(res);\n }\n responseHeaders = res.headers;\n return res\n .json()\n .then((data) => {\n if (res.status >= 400) {\n return reject(res);\n }\n if (data && data.error) {\n return reject(data);\n }\n // Handle error from RS API RESPONSE\n if (\n isRSAPI\n && data\n && Object.prototype.toString.call(data) === '[object Object]'\n ) {\n if (body && body.query && body.query instanceof Array) {\n let errorResponses = 0;\n const allResponses = body.query.filter(\n q => q.execute || q.execute === undefined,\n ).length;\n if (data) {\n Object.keys(data).forEach((key) => {\n if (\n data[key]\n && Object.prototype.hasOwnProperty.call(\n data[key],\n 'error',\n )\n ) {\n errorResponses += 1;\n }\n });\n }\n // reject only when all responses has error\n if (\n errorResponses > 0\n && allResponses === errorResponses\n ) {\n return reject(data);\n }\n }\n }\n\n // Handle error from _msearch response\n if (data && data.responses instanceof Array) {\n const allResponses = data.responses.length;\n const errorResponses = data.responses.filter(entry => Object.prototype.hasOwnProperty.call(entry, 'error')).length;\n // reject only when all responses has error\n if (allResponses === errorResponses) {\n return reject(data);\n }\n }\n const response = Object.assign({}, data, {\n _timestamp: timestamp,\n _headers: responseHeaders,\n });\n return resolve(response);\n })\n .catch(e => reject(e));\n })\n .catch(e => reject(e));\n })\n .catch(err => reject(err));\n } catch (e) {\n return reject(e);\n }\n });\n}\nexport default fetchRequest;\n","import { removeUndefined, validate } from '../../utils/index';\n\n/**\n * Index Service\n * @param {Object} args\n * @param {String} args.type\n * @param {Object} args.body\n * @param {String} args.id\n */\nfunction indexApi(args) {\n const parsedArgs = removeUndefined(args);\n // Validate arguments\n const valid = validate(parsedArgs, {\n body: 'object',\n });\n if (valid !== true) {\n throw valid;\n }\n const { type = '_doc', id, body } = parsedArgs;\n\n delete parsedArgs.type;\n delete parsedArgs.body;\n delete parsedArgs.id;\n\n let path;\n if (id) {\n path = type ? `${type}/${encodeURIComponent(id)}` : encodeURIComponent(id);\n } else {\n path = type;\n }\n return this.performFetchRequest({\n method: 'POST',\n path,\n params: parsedArgs,\n body,\n });\n}\nexport default indexApi;\n","import { removeUndefined, validate } from '../../utils/index';\n\n/**\n * Get Service\n * @param {Object} args\n * @param {String} args.type\n * @param {String} args.id\n */\nfunction getApi(args) {\n const parsedArgs = removeUndefined(args);\n // Validate arguments\n const valid = validate(parsedArgs, {\n id: 'string|number',\n });\n\n if (valid !== true) {\n throw valid;\n }\n\n const { type = '_doc', id } = parsedArgs;\n\n delete parsedArgs.type;\n delete parsedArgs.id;\n\n const path = `${type}/${encodeURIComponent(id)}`;\n\n return this.performFetchRequest({\n method: 'GET',\n path,\n params: parsedArgs,\n });\n}\nexport default getApi;\n","import { removeUndefined, validate } from '../../utils/index';\n\n/**\n * Update Service\n * @param {Object} args\n * @param {String} args.type\n * @param {Object} args.body\n * @param {String} args.id\n */\nfunction updateApi(args) {\n const parsedArgs = removeUndefined(args);\n // Validate arguments\n const valid = validate(parsedArgs, {\n id: 'string|number',\n body: 'object',\n });\n if (valid !== true) {\n throw valid;\n }\n\n const { type = '_doc', id, body } = parsedArgs;\n delete parsedArgs.type;\n delete parsedArgs.id;\n delete parsedArgs.body;\n const path = `${type}/${encodeURIComponent(id)}/_update`;\n\n return this.performFetchRequest({\n method: 'POST',\n path,\n params: parsedArgs,\n body,\n });\n}\nexport default updateApi;\n","import { removeUndefined, validate } from '../../utils/index';\n\n/**\n * Delete Service\n * @param {Object} args\n * @param {String} args.type\n * @param {String} args.id\n */\nfunction deleteApi(args) {\n const parsedArgs = removeUndefined(args);\n // Validate arguments\n const valid = validate(parsedArgs, {\n id: 'string|number',\n });\n if (valid !== true) {\n throw valid;\n }\n\n const { type = '_doc', id } = parsedArgs;\n delete parsedArgs.type;\n delete parsedArgs.id;\n\n const path = `${type}/${encodeURIComponent(id)}`;\n\n return this.performFetchRequest({\n method: 'DELETE',\n path,\n params: parsedArgs,\n });\n}\nexport default deleteApi;\n","import { removeUndefined, validate } from '../../utils/index';\n\n/**\n * Bulk Service\n * @param {Object} args\n * @param {String} args.type\n * @param {Object} args.body\n */\nfunction bulkApi(args) {\n const parsedArgs = removeUndefined(args);\n // Validate arguments\n const valid = validate(parsedArgs, {\n body: 'object',\n });\n if (valid !== true) {\n throw valid;\n }\n\n const { type, body } = parsedArgs;\n\n delete parsedArgs.type;\n delete parsedArgs.body;\n\n let path;\n if (type) {\n path = `${type}/_bulk`;\n } else {\n path = '_bulk';\n }\n\n return this.performFetchRequest({\n method: 'POST',\n path,\n params: parsedArgs,\n body,\n });\n}\nexport default bulkApi;\n","import { removeUndefined, validate } from '../../utils/index';\n\n/**\n * Search Service\n * @param {Object} args\n * @param {String} args.type\n * @param {Object} args.body\n */\nfunction searchApi(args) {\n const parsedArgs = removeUndefined(args);\n // Validate arguments\n const valid = validate(parsedArgs, {\n body: 'object',\n });\n if (valid !== true) {\n throw valid;\n }\n\n let type;\n if (Array.isArray(parsedArgs.type)) {\n type = parsedArgs.type.join();\n } else {\n // eslint-disable-next-line\n type = parsedArgs.type;\n }\n\n const { body } = parsedArgs;\n\n delete parsedArgs.type;\n delete parsedArgs.body;\n\n let path;\n if (type) {\n path = `${type}/_search`;\n } else {\n path = '_search';\n }\n\n return this.performFetchRequest({\n method: 'POST',\n path,\n params: parsedArgs,\n body,\n });\n}\nexport default searchApi;\n","import { removeUndefined, validate } from '../../utils/index';\n\n/**\n * Msearch Service\n * @param {Object} args\n * @param {String} args.type\n * @param {Object} args.body\n */\nfunction msearchApi(args) {\n const parsedArgs = removeUndefined(args);\n // Validate arguments\n const valid = validate(parsedArgs, {\n body: 'object',\n });\n if (valid !== true) {\n throw valid;\n }\n\n let type;\n if (Array.isArray(parsedArgs.type)) {\n type = parsedArgs.type.join();\n } else {\n ({ type } = parsedArgs);\n }\n\n const { body } = parsedArgs;\n\n delete parsedArgs.type;\n delete parsedArgs.body;\n\n let path;\n if (type) {\n path = `${type}/_msearch`;\n } else {\n path = '_msearch';\n }\n\n return this.performFetchRequest({\n method: 'POST',\n path,\n params: parsedArgs,\n body,\n });\n}\nexport default msearchApi;\n","import {\n getTelemetryHeaders, getMongoRequest, removeUndefined, validateRSQuery,\n} from '../../utils/index';\n\n/**\n * ReactiveSearch API Service for v3\n * @param {Array} query\n * @param {Object} settings\n * @param {boolean} settings.recordAnalytics\n * @param {boolean} settings.userId\n * @param {boolean} settings.enableQueryRules\n * @param {boolean} settings.customEvents\n */\nfunction reactiveSearchApi(query, settings) {\n const parsedSettings = removeUndefined(settings);\n\n // Validate query\n const valid = validateRSQuery(query);\n\n if (valid !== true) {\n throw valid;\n }\n\n const body = {\n settings: parsedSettings,\n query,\n };\n\n if (this.mongodb) {\n Object.assign(body, { mongodb: getMongoRequest(this.app, this.mongodb) });\n }\n\n return this.performFetchRequest({\n method: 'POST',\n path: '_reactivesearch',\n body,\n headers: getTelemetryHeaders(this.enableTelemetry),\n isRSAPI: true,\n });\n}\nexport default reactiveSearchApi;\n","import {\n removeUndefined, validateRSQuery, getMongoRequest, getTelemetryHeaders,\n} from '../../utils/index';\n\n/**\n * ReactiveSearch API Service for v3\n * @param {Array} query\n * @param {Object} settings\n * @param {boolean} settings.recordAnalytics\n * @param {boolean} settings.userId\n * @param {boolean} settings.enableQueryRules\n * @param {boolean} settings.customEvents\n */\nfunction reactiveSearchv3Api(query, settings) {\n const parsedSettings = removeUndefined(settings);\n\n // Validate query\n const valid = validateRSQuery(query);\n\n if (valid !== true) {\n throw valid;\n }\n\n const body = {\n settings: parsedSettings,\n query,\n };\n if (this.mongodb) {\n Object.assign(body, { mongodb: getMongoRequest(this.app, this.mongodb) });\n }\n return this.performFetchRequest({\n method: 'POST',\n path: '_reactivesearch.v3',\n body,\n headers: getTelemetryHeaders(this.enableTelemetry),\n isRSAPI: true,\n });\n}\nexport default reactiveSearchv3Api;\n","/**\n * To get mappings\n */\nfunction getMappings() {\n return this.performFetchRequest({\n method: 'GET',\n path: '_mapping',\n });\n}\nexport default getMappings;\n","import {\n getTelemetryHeaders,\n removeUndefined,\n validateRSQuery,\n} from '../../utils/index';\n\n/**\n * ReactiveSearch suggestions API for v3\n * @param {Array} query\n * @param {Object} settings\n * @param {boolean} settings.recordAnalytics\n * @param {boolean} settings.userId\n * @param {boolean} settings.enableQueryRules\n * @param {boolean} settings.customEvents\n */\nfunction getSuggestionsv3Api(query, settings) {\n const parsedSettings = removeUndefined(settings);\n\n // Validate query\n const valid = validateRSQuery(query);\n\n if (valid !== true) {\n throw valid;\n }\n\n const body = {\n settings: parsedSettings,\n query,\n };\n\n return this.performFetchRequest({\n method: 'POST',\n path: '_reactivesearch.v3',\n body,\n headers: getTelemetryHeaders(this.enableTelemetry),\n isRSAPI: true,\n isSuggestionsAPI: true,\n });\n}\n\nexport default getSuggestionsv3Api;\n","import AppBaseClient from './core/index';\nimport fetchRequest from './core/request/fetch';\nimport indexApi from './core/api/index';\nimport getApi from './core/api/get';\nimport updateApi from './core/api/update';\nimport deleteApi from './core/api/delete';\nimport bulkApi from './core/api/bulk';\nimport searchApi from './core/api/search';\nimport msearchApi from './core/api/msearch';\nimport reactiveSearchApi from './core/api/reactiveSearchApi';\nimport reactiveSearchv3Api from './core/api/reactiveSearchv3Api';\nimport getMappingsApi from './core/api/getMappings';\nimport { encodeHeaders } from './utils/index';\nimport getSuggestionsv3Api from './core/api/getSuggestionsv3Api';\n\nexport default function appbasejs(config) {\n const client = new AppBaseClient(config);\n\n AppBaseClient.prototype.performFetchRequest = fetchRequest;\n\n AppBaseClient.prototype.index = indexApi;\n\n AppBaseClient.prototype.get = getApi;\n\n AppBaseClient.prototype.update = updateApi;\n\n AppBaseClient.prototype.delete = deleteApi;\n\n AppBaseClient.prototype.bulk = bulkApi;\n\n AppBaseClient.prototype.search = searchApi;\n\n AppBaseClient.prototype.msearch = msearchApi;\n\n AppBaseClient.prototype.reactiveSearch = reactiveSearchApi;\n\n AppBaseClient.prototype.reactiveSearchv3 = reactiveSearchv3Api;\n\n AppBaseClient.prototype.getQuerySuggestions = getSuggestionsv3Api;\n\n AppBaseClient.prototype.getMappings = getMappingsApi;\n\n AppBaseClient.prototype.setHeaders = function setHeaders(\n headers = {},\n shouldEncode = false,\n ) {\n // Encode headers\n if (shouldEncode) {\n this.headers = encodeHeaders(headers);\n } else {\n this.headers = headers;\n }\n };\n\n if (typeof window !== 'undefined') {\n window.Appbase = client;\n }\n return client;\n}\n"],"names":["url","pattern","RegExp","matches","match","protocol","auth","host","path","query","hash","validateRSQuery","Object","prototype","toString","call","i","length","q","Error","id","validate","object","fields","invalid","emptyFor","keys","forEach","key","matchedType","split","find","type","push","missing","removeUndefined","value","constructor","JSON","parse","stringify","getMongoRequest","app","mongo","mongodb","index","db","collection","getTelemetryHeaders","enableTelemetry","headers","assign","AppBase","config","URL","credentials","slice","substring","indexOf","isAppbase","username","password","this","hasOwnProperty","obj","prop","qs","sep","eq","options","regexp","maxKeys","len","kstr","vstr","k","v","x","replace","idx","substr","decodeURIComponent","Array","isArray","stringifyPrimitive","isFinite","name","undefined","map","ks","encodeURIComponent","join","exports","require$$0","require$$1","__root__","root","F","fetch","self","support","searchParams","iterable","Symbol","blob","Blob","e","formData","arrayBuffer","viewClasses","isDataView","DataView","isPrototypeOf","isArrayBufferView","ArrayBuffer","isView","Headers","append","normalizeName","normalizeValue","oldValue","get","has","set","callback","thisArg","items","iteratorFor","values","entries","iterator","methods","Request","clone","body","_bodyInit","Body","Response","status","statusText","error","response","redirectStatuses","redirect","RangeError","location","input","init","Promise","resolve","reject","request","xhr","XMLHttpRequest","onload","rawHeaders","getAllResponseHeaders","line","parts","shift","trim","responseURL","responseText","onerror","TypeError","ontimeout","open","method","withCredentials","responseType","setRequestHeader","send","polyfill","String","test","toLowerCase","next","done","header","getOwnPropertyNames","consumed","bodyUsed","fileReaderReady","reader","result","readBlobAsArrayBuffer","FileReader","promise","readAsArrayBuffer","bufferClone","buf","view","Uint8Array","byteLength","buffer","_initBody","_bodyText","_bodyBlob","FormData","_bodyFormData","URLSearchParams","_bodyArrayBuffer","rejected","then","text","readAsText","chars","fromCharCode","readArrayBufferAsText","decode","json","upcased","mode","toUpperCase","referrer","form","bytes","bodyInit","ok","module","fetchRequest","args","parsedArgs","params","isRSAPI","isSuggestionsAPI","_this","bodyCopy","contentType","endsWith","timestamp","Date","now","Authorization","charCode","str","output","block","charAt","charCodeAt","btoa","requestOptions","arrayBody","item","responseHeaders","paramsString","querystring","finalURL","res","transformRequest","tarnsformRequestPromise","handleTransformRequest","ts","transformedRequest","getTime","data","errorResponses","allResponses","filter","execute","responses","entry","catch","err","indexApi","valid","performFetchRequest","getApi","updateApi","deleteApi","bulkApi","searchApi","msearchApi","reactiveSearchApi","settings","parsedSettings","reactiveSearchv3Api","getMappings","getSuggestionsv3Api","client","AppBaseClient","update","delete","bulk","search","msearch","reactiveSearch","reactiveSearchv3","getQuerySuggestions","getMappingsApi","setHeaders","shouldEncode","encodedHeaders","encodeURI","encodeHeaders","window","Appbase"],"mappings":"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"}