UNPKG

algoliasearch

Version:

A fully-featured and blazing-fast JavaScript API client to interact with Algolia API.

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