algoliasearch
Version:
A fully-featured and blazing-fast JavaScript API client to interact with Algolia API.
6 lines • 16 kB
JavaScript
function te(e){let r,t=`algolia-client-js-${e.key}`;function o(){return r===void 0&&(r=e.localStorage||window.localStorage),r}function n(){return JSON.parse(o().getItem(t)||"{}")}function l(s){o().setItem(t,JSON.stringify(s))}function u(){return new Promise(s=>setTimeout(s,0))}function a(){let s=e.timeToLive?e.timeToLive*1e3:null,m=n(),f=new Date().getTime(),x=!1;return{namespace:Object.fromEntries(Object.entries(m).filter(([,h])=>!h||h.timestamp===void 0||s&&h.timestamp+s<f?(x=!0,!1):!0)),changed:x}}return{get(s,m,f={miss:()=>Promise.resolve()}){return u().then(()=>{let{namespace:x,changed:p}=a(),h=x[JSON.stringify(s)];return p&&l(x),h?h.value:m().then(y=>f.miss(y).then(()=>y))})},set(s,m){return u().then(()=>{let f=n();return f[JSON.stringify(s)]={timestamp:new Date().getTime(),value:m},o().setItem(t,JSON.stringify(f)),m})},delete(s){return u().then(()=>{let m=n();delete m[JSON.stringify(s)],o().setItem(t,JSON.stringify(m))})},clear(){return Promise.resolve().then(()=>{o().removeItem(t)})}}}function xe(){return{get(e,r,t={miss:()=>Promise.resolve()}){return r().then(n=>Promise.all([n,t.miss(n)])).then(([n])=>n)},set(e,r){return Promise.resolve(r)},delete(e){return Promise.resolve()},clear(){return Promise.resolve()}}}function I(e){let r=[...e.caches],t=r.shift();return t===void 0?xe():{get(o,n,l={miss:()=>Promise.resolve()}){return t.get(o,n,l).catch(()=>I({caches:r}).get(o,n,l))},set(o,n){return t.set(o,n).catch(()=>I({caches:r}).set(o,n))},delete(o){return t.delete(o).catch(()=>I({caches:r}).delete(o))},clear(){return t.clear().catch(()=>I({caches:r}).clear())}}}function k(e={serializable:!0}){let r={};return{get(t,o,n={miss:()=>Promise.resolve()}){let l=JSON.stringify(t);if(l in r)return Promise.resolve(e.serializable?JSON.parse(r[l]):r[l]);let u=o();return u.then(a=>n.miss(a)).then(()=>u)},set(t,o){return r[JSON.stringify(t)]=e.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(t){return delete r[JSON.stringify(t)],Promise.resolve()},clear(){return r={},Promise.resolve()}}}function ye(e){let r={value:`Algolia for JavaScript (${e})`,add(t){let o=`; ${t.segment}${t.version!==void 0?` (${t.version})`:""}`;return r.value.indexOf(o)===-1&&(r.value=`${r.value}${o}`),r}};return r}function oe(e,r,t="WithinHeaders"){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t==="WithinHeaders"?o:{}},queryParameters(){return t==="WithinQueryParameters"?o:{}}}}function ae({algoliaAgents:e,client:r,version:t}){let o=ye(t).add({segment:r,version:t});return e.forEach(n=>o.add(n)),o}function ne(){return{debug(e,r){return Promise.resolve()},info(e,r){return Promise.resolve()},error(e,r){return Promise.resolve()}}}var ge=10*1024*1024;async function*Pe(e){let r=e.getReader();try{for(;;){let{done:t,value:o}=await r.read();if(t)return;yield o}}finally{r.releaseLock()}}function Te(e){return Symbol.asyncIterator in e?e:Pe(e)}async function*ve(e){let r=new TextDecoder("utf-8"),t=[],o=0,n=!1,l=!0;for await(let a of Te(e)){let s=r.decode(a,{stream:!0}),m=0;for(n&&(n=!1,s.length>0&&s[0]===`
`&&(m=1));m<s.length;){let f=s.indexOf("\r",m),x=s.indexOf(`
`,m);if(f===-1&&x===-1){let O=s.slice(m);if(t.push(O),o+=O.length,o>ge)throw new Error("SSE line buffer exceeded 10MB");break}let p,h;f!==-1&&(x===-1||f<x)?(p=f,f+1<s.length?h=s[f+1]===`
`?2:1:(n=!0,h=1)):(p=x,h=1);let y=s.slice(m,p);t.push(y);let T=t.length===1?t[0]:t.join("");t.length=0,o=0,l&&(T.startsWith("\uFEFF")&&(T=T.slice(1)),l=!1),yield T,m=p+h}}let u=r.decode();if(u&&t.push(u),t.length>0){let a=t.join("");l&&a.startsWith("\uFEFF")&&(a=a.slice(1)),yield a}}var Re=class{data=[];eventType="";lastEventId=null;retry=null;decode(e){if(e==="")return this.dispatch();if(e[0]===":")return null;let r=e.indexOf(":"),t,o;switch(r===-1?(t=e,o=""):(t=e.slice(0,r),o=e.slice(r+1),o[0]===" "&&(o=o.slice(1))),t){case"data":this.data.push(o);break;case"event":this.eventType=o;break;case"id":o.includes("\0")||(this.lastEventId=o);break;case"retry":/^[0-9]+$/.test(o)&&(this.retry=parseInt(o,10));break}return null}dispatch(){let e=this.eventType;if(this.eventType="",this.data.length===0)return null;let r={data:this.data.join(`
`),event:e,id:this.lastEventId,retry:this.retry};return this.data=[],r}};async function*Se(e){let r=new Re;for await(let t of ve(e)){let o=r.decode(t);o!==null&&(yield o)}}var Ee=750,B=120*1e3;function V(e,r="up"){let t=Date.now();function o(){return r==="up"||Date.now()-t>B}function n(){return r==="timed out"&&Date.now()-t<=B}return{...e,status:r,lastUpdate:t,isUp:o,isTimedOut:n}}var se=class extends Error{name="AlgoliaError";constructor(e,r){super(e),r&&(this.name=r)}};var ie=class extends se{stackTrace;correlationId;constructor(e,r,t,o){super(o?`${e} (Correlation-ID: ${o})`:e,t),this.stackTrace=r,this.correlationId=o}},X=class extends ie{constructor(e,r){super("Unreachable hosts - your application id may be incorrect. If the error persists, please visit our help center https://alg.li/support-unreachable-hosts or reach out to the Algolia Support team: https://alg.li/support",e,"RetryError",r)}},U=class extends ie{status;constructor(e,r,t,o="ApiError",n){super(e,t,o,n),this.status=r}},we=class extends se{response;correlationId;constructor(e,r,t){super(t?`${e} (Correlation-ID: ${t})`:e,"DeserializationError"),this.response=r,this.correlationId=t}},Ae=class extends U{error;constructor(e,r,t,o,n){super(e,r,o,"DetailedApiError",n),this.error=t}};function ce(e){let r=e;for(let t=e.length-1;t>0;t--){let o=Math.floor(Math.random()*(t+1)),n=e[t];r[t]=e[o],r[o]=n}return r}function K(e,r,t){let o=be(t),n=`${e.protocol}://${e.url}${e.port?`:${e.port}`:""}/${r.charAt(0)==="/"?r.substring(1):r}`;return o.length&&(n+=`?${o}`),n}function be(e){return Object.keys(e).filter(r=>e[r]!==void 0).sort().map(r=>`${r}=${encodeURIComponent(Object.prototype.toString.call(e[r])==="[object Array]"?e[r].join(","):e[r]).replace(/\+/g,"%20")}`).join("&")}function Y(e,r){if(e.method==="GET"||e.data===void 0&&r.data===void 0)return;let t=Array.isArray(e.data)?e.data:{...e.data,...r.data};return JSON.stringify(t)}function Z(e,r,t){let o={Accept:"application/json",...e,...r,...t},n={};return Object.keys(o).forEach(l=>{let u=o[l];n[l.toLowerCase()]=u}),n}function ue(e){if(!(e.status===204||e.content.length===0))try{return JSON.parse(e.content)}catch(r){throw new we(r.message,e,M(e.headers))}}function qe(e){return{status:e.status,headers:e.headers,content:e.content,data:ue(e)}}function M(e){if(!e)return;if(e["correlation-id"]!==void 0)return e["correlation-id"];let r=Object.keys(e).find(t=>t.toLowerCase()==="correlation-id");return r===void 0?void 0:e[r]}function Ie(e){for(let r=e.length-1;r>=0;r--){let t=M(e[r].response.headers);if(t!==void 0)return t}}function Ce(e,r){let{content:t,status:o}=e,n=M(e.headers);try{let l=JSON.parse(t);return"error"in l?new Ae(l.message,o,l.error,r,n):new U(l.message,o,r,"ApiError",n)}catch{}return new U(t,o,r,"ApiError",n)}var N="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",ee=11;function re(){var e;let r="";if(typeof((e=globalThis.crypto)==null?void 0:e.getRandomValues)=="function"){let t=new Uint8Array(ee);globalThis.crypto.getRandomValues(t);for(let o of t)r+=N[o%N.length];return r}for(let t=0;t<ee;t++)r+=N[Math.floor(Math.random()*N.length)];return r}function Le({isTimedOut:e,status:r}){return!e&&~~r===0}function Oe({isTimedOut:e,status:r}){return e||Le({isTimedOut:e,status:r})||~~(r/100)!==2&&~~(r/100)!==4}function He({status:e}){return~~(e/100)===2}function _e(e){return e.map(r=>le(r))}function le(e){let r=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...r}}}}function me({hosts:e,hostsCache:r,baseHeaders:t,logger:o,baseQueryParameters:n,algoliaAgent:l,timeouts:u,requester:a,requestsCache:s,responsesCache:m,compress:f,compression:x,requestIdChannel:p}){function h(i,c){p===void 0||i["request-id"]!==void 0||Object.keys(c).some(R=>R.toLowerCase()==="x-algolia-request-id")||(p==="headers"?i["request-id"]=re():c["x-algolia-request-id"]=re())}async function y(i){let c=await Promise.all(i.map(d=>r.get(d,()=>Promise.resolve(V(d))))),R=c.filter(d=>d.isUp()),P=c.filter(d=>d.isTimedOut()),w=[...R,...P];return{hosts:w.length>0?w:i,getTimeout(d,b){return(P.length===0&&d===0?1:P.length+3+d)*b}}}async function T(i,c,R){let P=[],w=Y(i,c),g=Z(t,i.headers,c.headers),d=x==="gzip"&&w!==void 0&&w.length>Ee&&(i.method==="POST"||i.method==="PUT");d&&f===void 0&&o.info("Compression is disabled because no compress method is available.");let b=d&&f!==void 0,D=b?await f(w):w;b&&(g["content-encoding"]="gzip");let H=i.method==="GET"?{...i.data,...c.data}:{},A={...n,...i.queryParameters,...H};if(l.value&&(A["x-algolia-agent"]=l.value),c&&c.queryParameters)for(let v of Object.keys(c.queryParameters))!c.queryParameters[v]||Object.prototype.toString.call(c.queryParameters[v])==="[object Object]"?A[v]=c.queryParameters[v]:A[v]=c.queryParameters[v].toString();h(g,A);let C=0,_=async(v,F)=>{let L=v.pop();if(L===void 0)throw new X(_e(P),Ie(P));let $={...u,...c.timeouts},G={data:D,headers:g,method:i.method,url:K(L,i.path,A),connectTimeout:F(C,$.connect),responseTimeout:F(C,R?$.read:$.write)},J=j=>{let Q={request:G,response:j,host:L,triesLeft:v.length};return P.push(Q),Q},q=await a.send(G);if(Oe(q)){let j=J(q);return q.isTimedOut&&C++,o.info("Retryable failure",le(j)),await r.set(L,V(L,q.isTimedOut?"timed out":"down")),_(v,F)}if(He(q))return q;throw J(q),Ce(q,P)},S=e.filter(v=>v.accept==="readWrite"||(R?v.accept==="read":v.accept==="write")),z=await y(S);return _([...z.hosts].reverse(),z.getTimeout)}function O(i,c={}){let R=()=>T(i,c,P).then(d=>ue(d)),P=i.useReadTransporter||i.method==="GET";if((c.cacheable||i.cacheable)!==!0)return R();let g={request:i,requestOptions:c,transporter:{queryParameters:n,headers:t}};return m.get(g,()=>s.get(g,()=>s.set(g,R()).then(d=>Promise.all([s.delete(g),d]),d=>Promise.all([s.delete(g),Promise.reject(d)])).then(([d,b])=>b)),{miss:d=>m.set(g,d)})}function pe(i,c={}){let R=i.useReadTransporter||i.method==="GET";return T(i,c,R).then(P=>qe(P))}async function*he(i,c={}){if(!a.sendStream)throw new Error("This requester does not support streaming");let R=Y(i,c),P=Z(t,i.headers,c.headers);P.accept="text/event-stream";let w=i.method==="GET"?{...i.data,...c.data}:{},g={...n,...i.queryParameters,...w};if(l.value&&(g["x-algolia-agent"]=l.value),c&&c.queryParameters)for(let S of Object.keys(c.queryParameters))!c.queryParameters[S]||Object.prototype.toString.call(c.queryParameters[S])==="[object Object]"?g[S]=c.queryParameters[S]:g[S]=c.queryParameters[S].toString();h(P,g);let d=i.useReadTransporter||i.method==="GET",b=e.filter(S=>S.accept==="readWrite"||(d?S.accept==="read":S.accept==="write")),H=(await y(b)).hosts[0];if(!H)throw new X([]);let A={...u,...c.timeouts},C={data:R,headers:P,method:i.method,url:K(H,i.path,g),connectTimeout:A.connect,responseTimeout:d?A.read:A.write},_=await a.sendStream(C);yield*Se(_)}return{hostsCache:r,requester:a,timeouts:u,logger:o,algoliaAgent:l,baseHeaders:t,baseQueryParameters:n,requestIdChannel:p,hosts:e,request:O,requestWithHttpInfo:pe,requestStream:he,requestsCache:s,responsesCache:m}}function E(e,r,t){if(t==null||typeof t=="string"&&t.length===0)throw new Error(`Parameter \`${e}\` is required when calling \`${r}\`.`)}function Ne(e){let r={};for(let t of e.trim().split(/[\r\n]+/)){let o=t.indexOf(": ");o>0&&(r[t.slice(0,o).toLowerCase()]=t.slice(o+2))}return r}function fe(){function e(r){return new Promise(t=>{let o=new XMLHttpRequest;o.open(r.method,r.url,!0),Object.keys(r.headers).forEach(a=>o.setRequestHeader(a,r.headers[a]));let n=(a,s)=>setTimeout(()=>{o.abort(),t({status:0,content:s,isTimedOut:!0})},a),l=n(r.connectTimeout,"Connection timeout"),u;o.onreadystatechange=()=>{o.readyState>o.OPENED&&u===void 0&&(clearTimeout(l),u=n(r.responseTimeout,"Socket timeout"))},o.onerror=()=>{o.status===0&&(clearTimeout(l),clearTimeout(u),t({content:o.responseText||"Network request failed",status:o.status,isTimedOut:!1}))},o.onload=()=>{clearTimeout(l),clearTimeout(u),t({content:o.responseText,headers:Ne(o.getAllResponseHeaders()),status:o.status,isTimedOut:!1})},o.send(r.data)})}return{send:e}}var W="5.57.0";function ke(e){return[{url:`${e}-dsn.algolia.net`,accept:"read",protocol:"https"},{url:`${e}.algolia.net`,accept:"write",protocol:"https"}].concat(ce([{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"}]))}function de({appId:e,apiKey:r,authMode:t,algoliaAgents:o,...n}){let l=oe(e,r,t),u=me({hosts:ke(e),...n,algoliaAgent:ae({algoliaAgents:o,client:"Lite",version:W}),baseHeaders:{"content-type":"text/plain",...l.headers(),...n.baseHeaders},baseQueryParameters:{...l.queryParameters(),...n.baseQueryParameters}});return{transporter:u,appId:e,apiKey:r,clearCache(){return Promise.all([u.requestsCache.clear(),u.responsesCache.clear()]).then(()=>{})},get _ua(){return u.algoliaAgent.value},addAlgoliaAgent(a,s){u.algoliaAgent.add({segment:a,version:s})},setClientApiKey({apiKey:a}){!t||t==="WithinHeaders"?u.baseHeaders["x-algolia-api-key"]=a:u.baseQueryParameters["x-algolia-api-key"]=a},searchForHits(a,s){return this.search(a,s)},searchForFacets(a,s){return this.search(a,s)},customPost({path:a,parameters:s,body:m},f){E("path","customPost",a);let y={method:"POST",path:"/{path}".replace("{path}",a),queryParameters:s||{},headers:{},data:m||{}};return u.request(y,f)},customPostWithHTTPInfo({path:a,parameters:s,body:m},f){E("path","customPostWithHTTPInfo",a);let y={method:"POST",path:"/{path}".replace("{path}",a),queryParameters:s||{},headers:{},data:m||{}};return u.requestWithHttpInfo(y,f)},getRecommendations(a,s){a&&Array.isArray(a)&&(a={requests:a}),E("getRecommendationsParams","getRecommendations",a),E("getRecommendationsParams.requests","getRecommendations",a.requests);let p={method:"POST",path:"/1/indexes/*/recommendations",queryParameters:{},headers:{},data:a,useReadTransporter:!0,cacheable:!0};return u.request(p,s)},getRecommendationsWithHTTPInfo(a,s){a&&Array.isArray(a)&&(a={requests:a}),E("getRecommendationsParams","getRecommendationsWithHTTPInfo",a),E("getRecommendationsParams.requests","getRecommendationsWithHTTPInfo",a.requests);let p={method:"POST",path:"/1/indexes/*/recommendations",queryParameters:{},headers:{},data:a,useReadTransporter:!0,cacheable:!0};return u.requestWithHttpInfo(p,s)},search(a,s){a&&Array.isArray(a)&&(a={requests:a.map(({params:y,...T})=>T.type==="facet"?{...T,...y,type:"facet"}:{...T,...y,facet:void 0,maxFacetHits:void 0,facetQuery:void 0})}),E("searchMethodParams","search",a),E("searchMethodParams.requests","search",a.requests);let p={method:"POST",path:"/1/indexes/*/queries",queryParameters:{},headers:{},data:a,useReadTransporter:!0,cacheable:!0};return u.request(p,s)},searchWithHTTPInfo(a,s){a&&Array.isArray(a)&&(a={requests:a.map(({params:y,...T})=>T.type==="facet"?{...T,...y,type:"facet"}:{...T,...y,facet:void 0,maxFacetHits:void 0,facetQuery:void 0})}),E("searchMethodParams","searchWithHTTPInfo",a),E("searchMethodParams.requests","searchWithHTTPInfo",a.requests);let p={method:"POST",path:"/1/indexes/*/queries",queryParameters:{},headers:{},data:a,useReadTransporter:!0,cacheable:!0};return u.requestWithHttpInfo(p,s)}}}function Ao(e,r,t){if(!e||typeof e!="string")throw new Error("`appId` is missing.");if(!r||typeof r!="string")throw new Error("`apiKey` is missing.");let{compression:o,...n}=t||{};return de({appId:e,apiKey:r,timeouts:{connect:1e3,read:2e3,write:3e4},logger:ne(),requester:fe(),algoliaAgents:[{segment:"Browser"}],authMode:"WithinQueryParameters",requestIdChannel:"queryParameters",responsesCache:k(),requestsCache:k({serializable:!1}),hostsCache:I({caches:[te({key:`${W}-${e}`}),k()]}),...n})}export{W as apiClientVersion,Ao as liteClient};
//# sourceMappingURL=browser.min.js.map