@algolia/recommend
Advanced tools
Comparing version 5.0.0-alpha.26 to 5.0.0-alpha.27
@@ -9,3 +9,3 @@ 'use strict'; | ||
// This file is generated, manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. | ||
const apiClientVersion = '5.0.0-alpha.26'; | ||
const apiClientVersion = '5.0.0-alpha.27'; | ||
function getDefaultHosts(appId) { | ||
@@ -12,0 +12,0 @@ return [ |
@@ -10,7 +10,5 @@ function createAuth(appId, apiKey, authMode = 'WithinHeaders') { | ||
}, | ||
queryParameters() { | ||
return authMode === 'WithinQueryParameters' ? credentials : {}; | ||
} | ||
}; | ||
@@ -20,6 +18,5 @@ } | ||
function createBrowserLocalStorageCache(options) { | ||
let storage; // We've changed the namespace to avoid conflicts with v4, as this version is a huge breaking change | ||
let storage; | ||
// We've changed the namespace to avoid conflicts with v4, as this version is a huge breaking change | ||
const namespaceKey = `algolia-client-js-${options.key}`; | ||
function getStorage() { | ||
@@ -29,10 +26,7 @@ if (storage === undefined) { | ||
} | ||
return storage; | ||
} | ||
function getNamespace() { | ||
return JSON.parse(getStorage().getItem(namespaceKey) || '{}'); | ||
} | ||
return { | ||
@@ -50,3 +44,2 @@ get(key, defaultValue, events = { | ||
}, | ||
set(key, value) { | ||
@@ -60,3 +53,2 @@ return Promise.resolve().then(() => { | ||
}, | ||
delete(key) { | ||
@@ -69,3 +61,2 @@ return Promise.resolve().then(() => { | ||
}, | ||
clear() { | ||
@@ -76,3 +67,2 @@ return Promise.resolve().then(() => { | ||
} | ||
}; | ||
@@ -89,15 +79,11 @@ } | ||
}, | ||
set(_key, value) { | ||
return Promise.resolve(value); | ||
}, | ||
delete(_key) { | ||
return Promise.resolve(); | ||
}, | ||
clear() { | ||
return Promise.resolve(); | ||
} | ||
}; | ||
@@ -109,7 +95,5 @@ } | ||
const current = caches.shift(); | ||
if (current === undefined) { | ||
return createNullCache(); | ||
} | ||
return { | ||
@@ -125,3 +109,2 @@ get(key, defaultValue, events = { | ||
}, | ||
set(key, value) { | ||
@@ -134,3 +117,2 @@ return current.set(key, value).catch(() => { | ||
}, | ||
delete(key) { | ||
@@ -143,3 +125,2 @@ return current.delete(key).catch(() => { | ||
}, | ||
clear() { | ||
@@ -152,3 +133,2 @@ return current.clear().catch(() => { | ||
} | ||
}; | ||
@@ -166,11 +146,8 @@ } | ||
const keyAsString = JSON.stringify(key); | ||
if (keyAsString in cache) { | ||
return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]); | ||
} | ||
const promise = defaultValue(); | ||
return promise.then(value => events.miss(value)).then(() => promise); | ||
}, | ||
set(key, value) { | ||
@@ -180,3 +157,2 @@ cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value; | ||
}, | ||
delete(key) { | ||
@@ -186,3 +162,2 @@ delete cache[JSON.stringify(key)]; | ||
}, | ||
clear() { | ||
@@ -192,3 +167,2 @@ cache = {}; | ||
} | ||
}; | ||
@@ -202,12 +176,10 @@ } | ||
const lastUpdate = Date.now(); | ||
function isUp() { | ||
return status === 'up' || Date.now() - lastUpdate > EXPIRATION_DELAY; | ||
} | ||
function isTimedOut() { | ||
return status === 'timed out' && Date.now() - lastUpdate <= EXPIRATION_DELAY; | ||
} | ||
return { ...host, | ||
return { | ||
...host, | ||
status, | ||
@@ -231,3 +203,2 @@ lastUpdate, | ||
} | ||
return obj; | ||
@@ -239,5 +210,3 @@ } | ||
super(message); | ||
_defineProperty(this, "name", 'AlgoliaError'); | ||
if (name) { | ||
@@ -247,13 +216,10 @@ this.name = name; | ||
} | ||
} | ||
class ErrorWithStackTrace extends AlgoliaError { | ||
constructor(message, stackTrace, name) { | ||
super(message, name); // the array and object should be frozen to reflect the stackTrace at the time of the error | ||
super(message, name); | ||
// the array and object should be frozen to reflect the stackTrace at the time of the error | ||
_defineProperty(this, "stackTrace", void 0); | ||
this.stackTrace = stackTrace; | ||
} | ||
} | ||
@@ -264,3 +230,2 @@ class RetryError extends ErrorWithStackTrace { | ||
} | ||
} | ||
@@ -270,8 +235,5 @@ class ApiError extends ErrorWithStackTrace { | ||
super(message, stackTrace, 'ApiError'); | ||
_defineProperty(this, "status", void 0); | ||
this.status = status; | ||
} | ||
} | ||
@@ -281,8 +243,5 @@ class DeserializationError extends AlgoliaError { | ||
super(message, 'DeserializationError'); | ||
_defineProperty(this, "response", void 0); | ||
this.response = response; | ||
} | ||
} | ||
@@ -292,3 +251,2 @@ | ||
const shuffledArray = array; | ||
for (let c = array.length - 1; c > 0; c--) { | ||
@@ -300,3 +258,2 @@ const b = Math.floor(Math.random() * (c + 1)); | ||
} | ||
return shuffledArray; | ||
@@ -307,7 +264,5 @@ } | ||
let url = `${host.protocol}://${host.url}/${path.charAt(0) === '/' ? path.substr(1) : path}`; | ||
if (queryParametersAsString.length) { | ||
url += `?${queryParametersAsString}`; | ||
} | ||
return url; | ||
@@ -317,3 +272,2 @@ } | ||
const isObjectOrArray = value => Object.prototype.toString.call(value) === '[object Object]' || Object.prototype.toString.call(value) === '[object Array]'; | ||
return Object.keys(parameters).map(key => `${key}=${encodeURIComponent(isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key])}`).join('&'); | ||
@@ -325,4 +279,4 @@ } | ||
} | ||
const data = Array.isArray(request.data) ? request.data : { ...request.data, | ||
const data = Array.isArray(request.data) ? request.data : { | ||
...request.data, | ||
...requestOptions.data | ||
@@ -358,8 +312,7 @@ }; | ||
let message = content; | ||
try { | ||
message = JSON.parse(content).message; | ||
} catch (e) {// .. | ||
} catch (e) { | ||
// .. | ||
} | ||
return new ApiError(message, status, stackFrame); | ||
@@ -396,5 +349,8 @@ } | ||
} : {}; | ||
return { ...stackFrame, | ||
request: { ...stackFrame.request, | ||
headers: { ...stackFrame.request.headers, | ||
return { | ||
...stackFrame, | ||
request: { | ||
...stackFrame.request, | ||
headers: { | ||
...stackFrame.request.headers, | ||
...modifiedHeaders | ||
@@ -424,4 +380,4 @@ } | ||
const hostsUp = statefulHosts.filter(host => host.isUp()); | ||
const hostsTimedOut = statefulHosts.filter(host => host.isTimedOut()); // Note, we put the hosts that previously timed out on the end of the list. | ||
const hostsTimedOut = statefulHosts.filter(host => host.isTimedOut()); | ||
// Note, we put the hosts that previously timed out on the end of the list. | ||
const hostsAvailable = [...hostsUp, ...hostsTimedOut]; | ||
@@ -431,3 +387,2 @@ const compatibleHostsAvailable = hostsAvailable.length > 0 ? hostsAvailable : compatibleHosts; | ||
hosts: compatibleHostsAvailable, | ||
getTimeout(timeoutsCount, baseTimeout) { | ||
@@ -448,6 +403,4 @@ /** | ||
} | ||
}; | ||
} | ||
async function retryableRequest(request, requestOptions, isRead = true) { | ||
@@ -458,7 +411,7 @@ const stackTrace = []; | ||
*/ | ||
const data = serializeData(request, requestOptions); | ||
const headers = serializeHeaders(baseHeaders, request.headers, requestOptions.headers); // On `GET`, the data is proxied to query parameters. | ||
const dataQueryParameters = request.method === 'GET' ? { ...request.data, | ||
const headers = serializeHeaders(baseHeaders, request.headers, requestOptions.headers); | ||
// On `GET`, the data is proxied to query parameters. | ||
const dataQueryParameters = request.method === 'GET' ? { | ||
...request.data, | ||
...requestOptions.data | ||
@@ -472,3 +425,2 @@ } : {}; | ||
}; | ||
if (requestOptions && requestOptions.queryParameters) { | ||
@@ -486,5 +438,3 @@ for (const key of Object.keys(requestOptions.queryParameters)) { | ||
} | ||
let timeoutsCount = 0; | ||
const retry = async (retryableHosts, getTimeout) => { | ||
@@ -495,13 +445,9 @@ /** | ||
const host = retryableHosts.pop(); | ||
if (host === undefined) { | ||
throw new RetryError(stackTraceWithoutCredentials(stackTrace)); | ||
} | ||
let responseTimeout = requestOptions.timeout; | ||
if (responseTimeout === undefined) { | ||
responseTimeout = isRead ? timeouts.read : timeouts.write; | ||
} | ||
const payload = { | ||
@@ -520,3 +466,2 @@ data, | ||
*/ | ||
const pushToStackTrace = response => { | ||
@@ -532,8 +477,6 @@ const stackFrame = { | ||
}; | ||
const response = await requester.send(payload); | ||
if (isRetryable(response)) { | ||
const stackFrame = pushToStackTrace(response); // If response is a timeout, we increase the number of timeouts so we can increase the timeout later. | ||
const stackFrame = pushToStackTrace(response); | ||
// If response is a timeout, we increase the number of timeouts so we can increase the timeout later. | ||
if (response.isTimedOut) { | ||
@@ -548,4 +491,2 @@ timeoutsCount++; | ||
// eslint-disable-next-line no-console -- this will be fixed by exposing a `logger` to the transporter | ||
console.log('Retryable failure', stackFrameWithoutCredentials(stackFrame)); | ||
@@ -557,11 +498,8 @@ /** | ||
*/ | ||
await hostsCache.set(host, createStatefulHost(host, response.isTimedOut ? 'timed out' : 'down')); | ||
return retry(retryableHosts, getTimeout); | ||
} | ||
if (isSuccess(response)) { | ||
return deserializeSuccess(response); | ||
} | ||
pushToStackTrace(response); | ||
@@ -578,4 +516,2 @@ throw deserializeFailure(response, stackTrace); | ||
*/ | ||
const compatibleHosts = hosts.filter(host => host.accept === 'readWrite' || (isRead ? host.accept === 'read' : host.accept === 'write')); | ||
@@ -585,3 +521,2 @@ const options = await createRetryableOptions(compatibleHosts); | ||
} | ||
function createRequest(request, requestOptions = {}) { | ||
@@ -593,3 +528,2 @@ /** | ||
const isRead = request.useReadTransporter || request.method === 'GET'; | ||
if (!isRead) { | ||
@@ -602,3 +536,2 @@ /** | ||
} | ||
const createRetryableRequest = () => { | ||
@@ -617,4 +550,2 @@ /** | ||
*/ | ||
const cacheable = requestOptions.cacheable || request.cacheable; | ||
@@ -625,3 +556,2 @@ /** | ||
*/ | ||
if (cacheable !== true) { | ||
@@ -635,4 +565,2 @@ return createRetryableRequest(); | ||
*/ | ||
const key = { | ||
@@ -650,3 +578,2 @@ request, | ||
*/ | ||
return responsesCache.get(key, () => { | ||
@@ -673,3 +600,2 @@ /** | ||
} | ||
return { | ||
@@ -692,13 +618,9 @@ hostsCache, | ||
value: `Algolia for JavaScript (${version})`, | ||
add(options) { | ||
const addedAlgoliaAgent = `; ${options.segment}${options.version !== undefined ? ` (${options.version})` : ''}`; | ||
if (algoliaAgent.value.indexOf(addedAlgoliaAgent) === -1) { | ||
algoliaAgent.value = `${algoliaAgent.value}${addedAlgoliaAgent}`; | ||
} | ||
return algoliaAgent; | ||
} | ||
}; | ||
@@ -778,3 +700,3 @@ return algoliaAgent; | ||
// This file is generated, manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. | ||
const apiClientVersion = '5.0.0-alpha.26'; | ||
const apiClientVersion = '5.0.0-alpha.27'; | ||
function getDefaultHosts(appId) { | ||
@@ -781,0 +703,0 @@ return [ |
@@ -5,3 +5,3 @@ import { createAuth, createTransporter, getAlgoliaAgent, shuffle, DEFAULT_CONNECT_TIMEOUT_NODE, DEFAULT_READ_TIMEOUT_NODE, DEFAULT_WRITE_TIMEOUT_NODE, createNullCache, createMemoryCache } from '@algolia/client-common'; | ||
// This file is generated, manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. | ||
const apiClientVersion = '5.0.0-alpha.26'; | ||
const apiClientVersion = '5.0.0-alpha.27'; | ||
function getDefaultHosts(appId) { | ||
@@ -8,0 +8,0 @@ return [ |
@@ -1,2 +0,2 @@ | ||
/*! recommend.umd.js | 5.0.0-alpha.26 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@algolia/recommend"]={})}(this,(function(e){"use strict";function t(e){let t;const r=`algolia-client-js-${e.key}`;function s(){return void 0===t&&(t=e.localStorage||window.localStorage),t}function a(){return JSON.parse(s().getItem(r)||"{}")}return{get:(e,t,r={miss:()=>Promise.resolve()})=>Promise.resolve().then((()=>{const r=JSON.stringify(e),s=a()[r];return Promise.all([s||t(),void 0!==s])})).then((([e,t])=>Promise.all([e,t||r.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve().then((()=>{const o=a();return o[JSON.stringify(e)]=t,s().setItem(r,JSON.stringify(o)),t})),delete:e=>Promise.resolve().then((()=>{const t=a();delete t[JSON.stringify(e)],s().setItem(r,JSON.stringify(t))})),clear:()=>Promise.resolve().then((()=>{s().removeItem(r)}))}}function r(e){const t=[...e.caches],s=t.shift();return void 0===s?{get:(e,t,r={miss:()=>Promise.resolve()})=>t().then((e=>Promise.all([e,r.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve(t),delete:e=>Promise.resolve(),clear:()=>Promise.resolve()}:{get:(e,a,o={miss:()=>Promise.resolve()})=>s.get(e,a,o).catch((()=>r({caches:t}).get(e,a,o))),set:(e,a)=>s.set(e,a).catch((()=>r({caches:t}).set(e,a))),delete:e=>s.delete(e).catch((()=>r({caches:t}).delete(e))),clear:()=>s.clear().catch((()=>r({caches:t}).clear()))}}function s(e={serializable:!0}){let t={};return{get(r,s,a={miss:()=>Promise.resolve()}){const o=JSON.stringify(r);if(o in t)return Promise.resolve(e.serializable?JSON.parse(t[o]):t[o]);const n=s();return n.then((e=>a.miss(e))).then((()=>n))},set:(r,s)=>(t[JSON.stringify(r)]=e.serializable?JSON.stringify(s):s,Promise.resolve(s)),delete:e=>(delete t[JSON.stringify(e)],Promise.resolve()),clear:()=>(t={},Promise.resolve())}}const a=12e4;function o(e,t="up"){const r=Date.now();return{...e,status:t,lastUpdate:r,isUp:function(){return"up"===t||Date.now()-r>a},isTimedOut:function(){return"timed out"===t&&Date.now()-r<=a}}}function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class i extends Error{constructor(e,t){super(e),n(this,"name","AlgoliaError"),t&&(this.name=t)}}class c extends i{constructor(e,t,r){super(e,r),n(this,"stackTrace",void 0),this.stackTrace=t}}class u extends c{constructor(e){super("Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",e,"RetryError")}}class l extends c{constructor(e,t,r){super(e,r,"ApiError"),n(this,"status",void 0),this.status=t}}class d extends i{constructor(e,t){super(e,"DeserializationError"),n(this,"response",void 0),this.response=t}}function h(e,t,r){const s=function(e){const t=e=>"[object Object]"===Object.prototype.toString.call(e)||"[object Array]"===Object.prototype.toString.call(e);return Object.keys(e).map((r=>`${r}=${encodeURIComponent(t(e[r])?JSON.stringify(e[r]):e[r])}`)).join("&")}(r);let a=`${e.protocol}://${e.url}/${"/"===t.charAt(0)?t.substr(1):t}`;return s.length&&(a+=`?${s}`),a}function m(e){const t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...t}}}}function p({hosts:e,hostsCache:t,baseHeaders:r,baseQueryParameters:s,algoliaAgent:a,timeouts:n,requester:i,requestsCache:c,responsesCache:p}){async function g(c,p,g=!0){const f=[],y=function(e,t){if("GET"===e.method||void 0===e.data&&void 0===t.data)return;const r=Array.isArray(e.data)?e.data:{...e.data,...t.data};return JSON.stringify(r)}(c,p),P=function(e,t,r){const s={Accept:"application/json",...e,...t,...r},a={};return Object.keys(s).forEach((e=>{const t=s[e];a[e.toLowerCase()]=t})),a}(r,c.headers,p.headers),w="GET"===c.method?{...c.data,...p.data}:{},q={"x-algolia-agent":a.value,...s,...c.queryParameters,...w};if(p&&p.queryParameters)for(const e of Object.keys(p.queryParameters))p.queryParameters[e]&&"[object Object]"!==Object.prototype.toString.call(p.queryParameters[e])?q[e]=p.queryParameters[e].toString():q[e]=p.queryParameters[e];let v=0;const b=async(e,r)=>{const s=e.pop();if(void 0===s)throw new u(function(e){return e.map((e=>m(e)))}(f));let a=p.timeout;void 0===a&&(a=g?n.read:n.write);const w={data:y,headers:P,method:c.method,url:h(s,c.path,q),connectTimeout:r(v,n.connect),responseTimeout:r(v,a)},O=t=>{const r={request:w,response:t,host:s,triesLeft:e.length};return f.push(r),r},T=await i.send(w);if(function({isTimedOut:e,status:t}){return e||function({isTimedOut:e,status:t}){return!e&&0==~~t}({isTimedOut:e,status:t})||2!=~~(t/100)&&4!=~~(t/100)}(T)){const a=O(T);return T.isTimedOut&&v++,console.log("Retryable failure",m(a)),await t.set(s,o(s,T.isTimedOut?"timed out":"down")),b(e,r)}if(function({status:e}){return 2==~~(e/100)}(T))return function(e){try{return JSON.parse(e.content)}catch(t){throw new d(t.message,e)}}(T);throw O(T),function({content:e,status:t},r){let s=e;try{s=JSON.parse(e).message}catch(e){}return new l(s,t,r)}(T,f)},O=e.filter((e=>"readWrite"===e.accept||(g?"read"===e.accept:"write"===e.accept))),T=await async function(e){const r=await Promise.all(e.map((e=>t.get(e,(()=>Promise.resolve(o(e))))))),s=r.filter((e=>e.isUp())),a=r.filter((e=>e.isTimedOut())),n=[...s,...a];return{hosts:n.length>0?n:e,getTimeout:(e,t)=>(0===a.length&&0===e?1:a.length+3+e)*t}}(O);return b([...T.hosts].reverse(),T.getTimeout)}return{hostsCache:t,requester:i,timeouts:n,algoliaAgent:a,baseHeaders:r,baseQueryParameters:s,hosts:e,request:function(e,t={}){const a=e.useReadTransporter||"GET"===e.method;if(!a)return g(e,t,a);const o=()=>g(e,t);if(!0!==(t.cacheable||e.cacheable))return o();const n={request:e,requestOptions:t,transporter:{queryParameters:s,headers:r}};return p.get(n,(()=>c.get(n,(()=>c.set(n,o()).then((e=>Promise.all([c.delete(n),e])),(e=>Promise.all([c.delete(n),Promise.reject(e)]))).then((([e,t])=>t))))),{miss:e=>p.set(n,e)})},requestsCache:c,responsesCache:p}}function g({algoliaAgents:e,client:t,version:r}){const s=function(e){const t={value:`Algolia for JavaScript (${e})`,add(e){const r=`; ${e.segment}${void 0!==e.version?` (${e.version})`:""}`;return-1===t.value.indexOf(r)&&(t.value=`${t.value}${r}`),t}};return t}(r).add({segment:t,version:r});return e.forEach((e=>s.add(e))),s}const f="5.0.0-alpha.26";function y(e){return[{url:`${e}-dsn.algolia.net`,accept:"read",protocol:"https"},{url:`${e}.algolia.net`,accept:"write",protocol:"https"}].concat(function(e){const t=e;for(let r=e.length-1;r>0;r--){const s=Math.floor(Math.random()*(r+1)),a=e[r];t[r]=e[s],t[s]=a}return t}([{url:`${e}-1.algolianet.com`,accept:"readWrite",protocol:"https"},{url:`${e}-2.algolianet.com`,accept:"readWrite",protocol:"https"},{url:`${e}-3.algolianet.com`,accept:"readWrite",protocol:"https"}]))}e.apiClientVersion=f,e.recommendClient=function(e,a,o){if(!e||"string"!=typeof e)throw new Error("`appId` is missing.");if(!a||"string"!=typeof a)throw new Error("`apiKey` is missing.");return function({appId:e,apiKey:t,authMode:r,algoliaAgents:s,...a}){const o=function(e,t,r="WithinHeaders"){const s={"x-algolia-api-key":t,"x-algolia-application-id":e};return{headers:()=>"WithinHeaders"===r?s:{},queryParameters:()=>"WithinQueryParameters"===r?s:{}}}(e,t,r),n=p({hosts:y(e),...a,algoliaAgent:g({algoliaAgents:s,client:"Recommend",version:f}),baseHeaders:{"content-type":"text/plain",...o.headers(),...a.baseHeaders},baseQueryParameters:{...o.queryParameters(),...a.baseQueryParameters}});return{transporter:n,appId:e,clearCache:()=>Promise.all([n.requestsCache.clear(),n.responsesCache.clear()]).then((()=>{})),get _ua(){return n.algoliaAgent.value},addAlgoliaAgent(e,t){n.algoliaAgent.add({segment:e,version:t})},del({path:e,parameters:t},r){if(!e)throw new Error("Parameter `path` is required when calling `del`.");const s={method:"DELETE",path:"/1{path}".replace("{path}",e),queryParameters:t||{},headers:{}};return n.request(s,r)},get({path:e,parameters:t},r){if(!e)throw new Error("Parameter `path` is required when calling `get`.");const s={method:"GET",path:"/1{path}".replace("{path}",e),queryParameters:t||{},headers:{}};return n.request(s,r)},getRecommendations(e,t){if(!e)throw new Error("Parameter `getRecommendationsParams` is required when calling `getRecommendations`.");if(!e.requests)throw new Error("Parameter `getRecommendationsParams.requests` is required when calling `getRecommendations`.");const r={method:"POST",path:"/1/indexes/*/recommendations",queryParameters:{},headers:{},data:e,useReadTransporter:!0,cacheable:!0};return n.request(r,t)},post({path:e,parameters:t,body:r},s){if(!e)throw new Error("Parameter `path` is required when calling `post`.");const a={method:"POST",path:"/1{path}".replace("{path}",e),queryParameters:t||{},headers:{},data:r||{}};return n.request(a,s)},put({path:e,parameters:t,body:r},s){if(!e)throw new Error("Parameter `path` is required when calling `put`.");const a={method:"PUT",path:"/1{path}".replace("{path}",e),queryParameters:t||{},headers:{},data:r||{}};return n.request(a,s)}}}({appId:e,apiKey:a,timeouts:{connect:1e3,read:2e3,write:3e4},requester:{send:function(e){return new Promise((t=>{const r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((t=>r.setRequestHeader(t,e.headers[t])));const s=(e,s)=>setTimeout((()=>{r.abort(),t({status:0,content:s,isTimedOut:!0})}),e),a=s(e.connectTimeout,"Connection timeout");let o;r.onreadystatechange=()=>{r.readyState>r.OPENED&&void 0===o&&(clearTimeout(a),o=s(e.responseTimeout,"Socket timeout"))},r.onerror=()=>{0===r.status&&(clearTimeout(a),clearTimeout(o),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=()=>{clearTimeout(a),clearTimeout(o),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},algoliaAgents:[{segment:"Browser"}],authMode:"WithinQueryParameters",responsesCache:s(),requestsCache:s({serializable:!1}),hostsCache:r({caches:[t({key:`5.0.0-alpha.26-${e}`}),s()]}),...o})}})); | ||
/*! recommend.umd.js | 5.0.0-alpha.27 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@algolia/recommend"]={})}(this,(function(e){"use strict";function t(e){let t;const r=`algolia-client-js-${e.key}`;function s(){return void 0===t&&(t=e.localStorage||window.localStorage),t}function a(){return JSON.parse(s().getItem(r)||"{}")}return{get:(e,t,r={miss:()=>Promise.resolve()})=>Promise.resolve().then((()=>{const r=JSON.stringify(e),s=a()[r];return Promise.all([s||t(),void 0!==s])})).then((([e,t])=>Promise.all([e,t||r.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve().then((()=>{const o=a();return o[JSON.stringify(e)]=t,s().setItem(r,JSON.stringify(o)),t})),delete:e=>Promise.resolve().then((()=>{const t=a();delete t[JSON.stringify(e)],s().setItem(r,JSON.stringify(t))})),clear:()=>Promise.resolve().then((()=>{s().removeItem(r)}))}}function r(e){const t=[...e.caches],s=t.shift();return void 0===s?{get:(e,t,r={miss:()=>Promise.resolve()})=>t().then((e=>Promise.all([e,r.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve(t),delete:e=>Promise.resolve(),clear:()=>Promise.resolve()}:{get:(e,a,o={miss:()=>Promise.resolve()})=>s.get(e,a,o).catch((()=>r({caches:t}).get(e,a,o))),set:(e,a)=>s.set(e,a).catch((()=>r({caches:t}).set(e,a))),delete:e=>s.delete(e).catch((()=>r({caches:t}).delete(e))),clear:()=>s.clear().catch((()=>r({caches:t}).clear()))}}function s(e={serializable:!0}){let t={};return{get(r,s,a={miss:()=>Promise.resolve()}){const o=JSON.stringify(r);if(o in t)return Promise.resolve(e.serializable?JSON.parse(t[o]):t[o]);const n=s();return n.then((e=>a.miss(e))).then((()=>n))},set:(r,s)=>(t[JSON.stringify(r)]=e.serializable?JSON.stringify(s):s,Promise.resolve(s)),delete:e=>(delete t[JSON.stringify(e)],Promise.resolve()),clear:()=>(t={},Promise.resolve())}}const a=12e4;function o(e,t="up"){const r=Date.now();return{...e,status:t,lastUpdate:r,isUp:function(){return"up"===t||Date.now()-r>a},isTimedOut:function(){return"timed out"===t&&Date.now()-r<=a}}}function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class i extends Error{constructor(e,t){super(e),n(this,"name","AlgoliaError"),t&&(this.name=t)}}class c extends i{constructor(e,t,r){super(e,r),n(this,"stackTrace",void 0),this.stackTrace=t}}class u extends c{constructor(e){super("Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",e,"RetryError")}}class l extends c{constructor(e,t,r){super(e,r,"ApiError"),n(this,"status",void 0),this.status=t}}class d extends i{constructor(e,t){super(e,"DeserializationError"),n(this,"response",void 0),this.response=t}}function h(e,t,r){const s=function(e){const t=e=>"[object Object]"===Object.prototype.toString.call(e)||"[object Array]"===Object.prototype.toString.call(e);return Object.keys(e).map((r=>`${r}=${encodeURIComponent(t(e[r])?JSON.stringify(e[r]):e[r])}`)).join("&")}(r);let a=`${e.protocol}://${e.url}/${"/"===t.charAt(0)?t.substr(1):t}`;return s.length&&(a+=`?${s}`),a}function m(e){const t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...t}}}}function p({hosts:e,hostsCache:t,baseHeaders:r,baseQueryParameters:s,algoliaAgent:a,timeouts:n,requester:i,requestsCache:c,responsesCache:p}){async function g(c,p,g=!0){const f=[],y=function(e,t){if("GET"===e.method||void 0===e.data&&void 0===t.data)return;const r=Array.isArray(e.data)?e.data:{...e.data,...t.data};return JSON.stringify(r)}(c,p),P=function(e,t,r){const s={Accept:"application/json",...e,...t,...r},a={};return Object.keys(s).forEach((e=>{const t=s[e];a[e.toLowerCase()]=t})),a}(r,c.headers,p.headers),w="GET"===c.method?{...c.data,...p.data}:{},q={"x-algolia-agent":a.value,...s,...c.queryParameters,...w};if(p&&p.queryParameters)for(const e of Object.keys(p.queryParameters))p.queryParameters[e]&&"[object Object]"!==Object.prototype.toString.call(p.queryParameters[e])?q[e]=p.queryParameters[e].toString():q[e]=p.queryParameters[e];let v=0;const b=async(e,r)=>{const s=e.pop();if(void 0===s)throw new u(function(e){return e.map((e=>m(e)))}(f));let a=p.timeout;void 0===a&&(a=g?n.read:n.write);const w={data:y,headers:P,method:c.method,url:h(s,c.path,q),connectTimeout:r(v,n.connect),responseTimeout:r(v,a)},O=t=>{const r={request:w,response:t,host:s,triesLeft:e.length};return f.push(r),r},T=await i.send(w);if(function({isTimedOut:e,status:t}){return e||function({isTimedOut:e,status:t}){return!e&&0==~~t}({isTimedOut:e,status:t})||2!=~~(t/100)&&4!=~~(t/100)}(T)){const a=O(T);return T.isTimedOut&&v++,console.log("Retryable failure",m(a)),await t.set(s,o(s,T.isTimedOut?"timed out":"down")),b(e,r)}if(function({status:e}){return 2==~~(e/100)}(T))return function(e){try{return JSON.parse(e.content)}catch(t){throw new d(t.message,e)}}(T);throw O(T),function({content:e,status:t},r){let s=e;try{s=JSON.parse(e).message}catch(e){}return new l(s,t,r)}(T,f)},O=e.filter((e=>"readWrite"===e.accept||(g?"read"===e.accept:"write"===e.accept))),T=await async function(e){const r=await Promise.all(e.map((e=>t.get(e,(()=>Promise.resolve(o(e))))))),s=r.filter((e=>e.isUp())),a=r.filter((e=>e.isTimedOut())),n=[...s,...a];return{hosts:n.length>0?n:e,getTimeout:(e,t)=>(0===a.length&&0===e?1:a.length+3+e)*t}}(O);return b([...T.hosts].reverse(),T.getTimeout)}return{hostsCache:t,requester:i,timeouts:n,algoliaAgent:a,baseHeaders:r,baseQueryParameters:s,hosts:e,request:function(e,t={}){const a=e.useReadTransporter||"GET"===e.method;if(!a)return g(e,t,a);const o=()=>g(e,t);if(!0!==(t.cacheable||e.cacheable))return o();const n={request:e,requestOptions:t,transporter:{queryParameters:s,headers:r}};return p.get(n,(()=>c.get(n,(()=>c.set(n,o()).then((e=>Promise.all([c.delete(n),e])),(e=>Promise.all([c.delete(n),Promise.reject(e)]))).then((([e,t])=>t))))),{miss:e=>p.set(n,e)})},requestsCache:c,responsesCache:p}}function g({algoliaAgents:e,client:t,version:r}){const s=function(e){const t={value:`Algolia for JavaScript (${e})`,add(e){const r=`; ${e.segment}${void 0!==e.version?` (${e.version})`:""}`;return-1===t.value.indexOf(r)&&(t.value=`${t.value}${r}`),t}};return t}(r).add({segment:t,version:r});return e.forEach((e=>s.add(e))),s}const f="5.0.0-alpha.27";function y(e){return[{url:`${e}-dsn.algolia.net`,accept:"read",protocol:"https"},{url:`${e}.algolia.net`,accept:"write",protocol:"https"}].concat(function(e){const t=e;for(let r=e.length-1;r>0;r--){const s=Math.floor(Math.random()*(r+1)),a=e[r];t[r]=e[s],t[s]=a}return t}([{url:`${e}-1.algolianet.com`,accept:"readWrite",protocol:"https"},{url:`${e}-2.algolianet.com`,accept:"readWrite",protocol:"https"},{url:`${e}-3.algolianet.com`,accept:"readWrite",protocol:"https"}]))}e.apiClientVersion=f,e.recommendClient=function(e,a,o){if(!e||"string"!=typeof e)throw new Error("`appId` is missing.");if(!a||"string"!=typeof a)throw new Error("`apiKey` is missing.");return function({appId:e,apiKey:t,authMode:r,algoliaAgents:s,...a}){const o=function(e,t,r="WithinHeaders"){const s={"x-algolia-api-key":t,"x-algolia-application-id":e};return{headers:()=>"WithinHeaders"===r?s:{},queryParameters:()=>"WithinQueryParameters"===r?s:{}}}(e,t,r),n=p({hosts:y(e),...a,algoliaAgent:g({algoliaAgents:s,client:"Recommend",version:f}),baseHeaders:{"content-type":"text/plain",...o.headers(),...a.baseHeaders},baseQueryParameters:{...o.queryParameters(),...a.baseQueryParameters}});return{transporter:n,appId:e,clearCache:()=>Promise.all([n.requestsCache.clear(),n.responsesCache.clear()]).then((()=>{})),get _ua(){return n.algoliaAgent.value},addAlgoliaAgent(e,t){n.algoliaAgent.add({segment:e,version:t})},del({path:e,parameters:t},r){if(!e)throw new Error("Parameter `path` is required when calling `del`.");const s={method:"DELETE",path:"/1{path}".replace("{path}",e),queryParameters:t||{},headers:{}};return n.request(s,r)},get({path:e,parameters:t},r){if(!e)throw new Error("Parameter `path` is required when calling `get`.");const s={method:"GET",path:"/1{path}".replace("{path}",e),queryParameters:t||{},headers:{}};return n.request(s,r)},getRecommendations(e,t){if(!e)throw new Error("Parameter `getRecommendationsParams` is required when calling `getRecommendations`.");if(!e.requests)throw new Error("Parameter `getRecommendationsParams.requests` is required when calling `getRecommendations`.");const r={method:"POST",path:"/1/indexes/*/recommendations",queryParameters:{},headers:{},data:e,useReadTransporter:!0,cacheable:!0};return n.request(r,t)},post({path:e,parameters:t,body:r},s){if(!e)throw new Error("Parameter `path` is required when calling `post`.");const a={method:"POST",path:"/1{path}".replace("{path}",e),queryParameters:t||{},headers:{},data:r||{}};return n.request(a,s)},put({path:e,parameters:t,body:r},s){if(!e)throw new Error("Parameter `path` is required when calling `put`.");const a={method:"PUT",path:"/1{path}".replace("{path}",e),queryParameters:t||{},headers:{},data:r||{}};return n.request(a,s)}}}({appId:e,apiKey:a,timeouts:{connect:1e3,read:2e3,write:3e4},requester:{send:function(e){return new Promise((t=>{const r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((t=>r.setRequestHeader(t,e.headers[t])));const s=(e,s)=>setTimeout((()=>{r.abort(),t({status:0,content:s,isTimedOut:!0})}),e),a=s(e.connectTimeout,"Connection timeout");let o;r.onreadystatechange=()=>{r.readyState>r.OPENED&&void 0===o&&(clearTimeout(a),o=s(e.responseTimeout,"Socket timeout"))},r.onerror=()=>{0===r.status&&(clearTimeout(a),clearTimeout(o),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=()=>{clearTimeout(a),clearTimeout(o),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},algoliaAgents:[{segment:"Browser"}],authMode:"WithinQueryParameters",responsesCache:s(),requestsCache:s({serializable:!1}),hostsCache:r({caches:[t({key:`5.0.0-alpha.27-${e}`}),s()]}),...o})}})); |
@@ -5,3 +5,3 @@ import type { CreateClientOptions, RequestOptions } from '@algolia/client-common'; | ||
import type { GetRecommendationsResponse } from '../model/getRecommendationsResponse'; | ||
export declare const apiClientVersion = "5.0.0-alpha.26"; | ||
export declare const apiClientVersion = "5.0.0-alpha.27"; | ||
export declare function createRecommendClient({ appId: appIdOption, apiKey: apiKeyOption, authMode, algoliaAgents, ...options }: CreateClientOptions): { | ||
@@ -8,0 +8,0 @@ transporter: import("@algolia/client-common").Transporter; |
{ | ||
"name": "@algolia/recommend", | ||
"version": "5.0.0-alpha.26", | ||
"version": "5.0.0-alpha.27", | ||
"description": "JavaScript client for recommend", | ||
@@ -41,5 +41,5 @@ "repository": "algolia/algoliasearch-client-javascript", | ||
"dependencies": { | ||
"@algolia/client-common": "5.0.0-alpha.26", | ||
"@algolia/requester-browser-xhr": "5.0.0-alpha.26", | ||
"@algolia/requester-node-http": "5.0.0-alpha.26" | ||
"@algolia/client-common": "5.0.0-alpha.27", | ||
"@algolia/requester-browser-xhr": "5.0.0-alpha.27", | ||
"@algolia/requester-node-http": "5.0.0-alpha.27" | ||
}, | ||
@@ -46,0 +46,0 @@ "devDependencies": { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
3260
158608
+ Added@algolia/client-common@5.0.0-alpha.27(transitive)
+ Added@algolia/requester-browser-xhr@5.0.0-alpha.27(transitive)
+ Added@algolia/requester-node-http@5.0.0-alpha.27(transitive)
- Removed@algolia/client-common@5.0.0-alpha.26(transitive)
- Removed@algolia/requester-browser-xhr@5.0.0-alpha.26(transitive)
- Removed@algolia/requester-node-http@5.0.0-alpha.26(transitive)