function W(t){let e,s=`algolia-client-js-${t.key}`;function r(){return e===void 0&&(e=t.localStorage||window.localStorage),e}function i(){return JSON.parse(r().getItem(s)||"{}")}function l(a){r().setItem(s,JSON.stringify(a))}function f(){let a=t.timeToLive?t.timeToLive*1e3:null,o=i(),n=Object.fromEntries(Object.entries(o).filter(([,d])=>d.timestamp!==void 0));if(l(n),!a)return;let c=Object.fromEntries(Object.entries(n).filter(([,d])=>{let g=new Date().getTime();return!(d.timestamp+aPromise.resolve()}){return Promise.resolve().then(()=>(f(),i()[JSON.stringify(a)])).then(c=>Promise.all([c?c.value:o(),c!==void 0])).then(([c,d])=>Promise.all([c,d||n.miss(c)])).then(([c])=>c)},set(a,o){return Promise.resolve().then(()=>{let n=i();return n[JSON.stringify(a)]={timestamp:new Date().getTime(),value:o},r().setItem(s,JSON.stringify(n)),o})},delete(a){return Promise.resolve().then(()=>{let o=i();delete o[JSON.stringify(a)],r().setItem(s,JSON.stringify(o))})},clear(){return Promise.resolve().then(()=>{r().removeItem(s)})}}}function re(){return{get(t,e,s={miss:()=>Promise.resolve()}){return e().then(i=>Promise.all([i,s.miss(i)])).then(([i])=>i)},set(t,e){return Promise.resolve(e)},delete(t){return Promise.resolve()},clear(){return Promise.resolve()}}}function x(t){let e=[...t.caches],s=e.shift();return s===void 0?re():{get(r,i,l={miss:()=>Promise.resolve()}){return s.get(r,i,l).catch(()=>x({caches:e}).get(r,i,l))},set(r,i){return s.set(r,i).catch(()=>x({caches:e}).set(r,i))},delete(r){return s.delete(r).catch(()=>x({caches:e}).delete(r))},clear(){return s.clear().catch(()=>x({caches:e}).clear())}}}function b(t={serializable:!0}){let e={};return{get(s,r,i={miss:()=>Promise.resolve()}){let l=JSON.stringify(s);if(l in e)return Promise.resolve(t.serializable?JSON.parse(e[l]):e[l]);let f=r();return f.then(a=>i.miss(a)).then(()=>f)},set(s,r){return e[JSON.stringify(s)]=t.serializable?JSON.stringify(r):r,Promise.resolve(r)},delete(s){return delete e[JSON.stringify(s)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}function se(t){let e={value:`Algolia for JavaScript (${t})`,add(s){let r=`; ${s.segment}${s.version!==void 0?` (${s.version})`:""}`;return e.value.indexOf(r)===-1&&(e.value=`${e.value}${r}`),e}};return e}function z(t,e,s="WithinHeaders"){let r={"x-algolia-api-key":e,"x-algolia-application-id":t};return{headers(){return s==="WithinHeaders"?r:{}},queryParameters(){return s==="WithinQueryParameters"?r:{}}}}function J({algoliaAgents:t,client:e,version:s}){let r=se(s).add({segment:e,version:s});return t.forEach(i=>r.add(i)),r}function M(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var oe=750,j=120*1e3;function Q(t,e="up"){let s=Date.now();function r(){return e==="up"||Date.now()-s>j}function i(){return e==="timed out"&&Date.now()-s<=j}return{...t,status:e,lastUpdate:s,isUp:r,isTimedOut:i}}var V=class extends Error{name="AlgoliaError";constructor(t,e){super(t),e&&(this.name=e)}};var F=class extends V{stackTrace;constructor(t,e,s){super(t,s),this.stackTrace=e}},ne=class extends F{constructor(t){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",t,"RetryError")}},D=class extends F{status;constructor(t,e,s,r="ApiError"){super(t,s,r),this.status=e}},ae=class extends V{response;constructor(t,e){super(t,"DeserializationError"),this.response=e}},ie=class extends D{error;constructor(t,e,s,r){super(t,e,r,"DetailedApiError"),this.error=s}};function ce(t,e,s){let r=ue(s),i=`${t.protocol}://${t.url}${t.port?`:${t.port}`:""}/${e.charAt(0)==="/"?e.substring(1):e}`;return r.length&&(i+=`?${r}`),i}function ue(t){return Object.keys(t).filter(e=>t[e]!==void 0).sort().map(e=>`${e}=${encodeURIComponent(Object.prototype.toString.call(t[e])==="[object Array]"?t[e].join(","):t[e]).replace(/\+/g,"%20")}`).join("&")}function me(t,e){if(t.method==="GET"||t.data===void 0&&e.data===void 0)return;let s=Array.isArray(t.data)?t.data:{...t.data,...e.data};return JSON.stringify(s)}function le(t,e,s){let r={Accept:"application/json",...t,...e,...s},i={};return Object.keys(r).forEach(l=>{let f=r[l];i[l.toLowerCase()]=f}),i}function de(t){try{return JSON.parse(t.content)}catch(e){throw new ae(e.message,t)}}function pe({content:t,status:e},s){try{let r=JSON.parse(t);return"error"in r?new ie(r.message,e,r.error,s):new D(r.message,e,s)}catch{}return new D(t,e,s)}function he({isTimedOut:t,status:e}){return!t&&~~e===0}function fe({isTimedOut:t,status:e}){return t||he({isTimedOut:t,status:e})||~~(e/100)!==2&&~~(e/100)!==4}function ge({status:t}){return~~(t/100)===2}function Pe(t){return t.map(e=>X(e))}function X(t){let e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...t,request:{...t.request,headers:{...t.request.headers,...e}}}}function K({hosts:t,hostsCache:e,baseHeaders:s,logger:r,baseQueryParameters:i,algoliaAgent:l,timeouts:f,requester:a,requestsCache:o,responsesCache:n,compress:c,compression:d}){async function g(u){let m=await Promise.all(u.map(h=>e.get(h,()=>Promise.resolve(Q(h))))),A=m.filter(h=>h.isUp()),q=m.filter(h=>h.isTimedOut()),E=[...A,...q];return{hosts:E.length>0?E:u,getTimeout(h,R){return(q.length===0&&h===0?1:q.length+3+h)*R}}}async function p(u,m,A){let q=[],E=me(u,m),y=le(s,u.headers,m.headers),h=d==="gzip"&&E!==void 0&&E.length>oe&&(u.method==="POST"||u.method==="PUT");h&&c===void 0&&r.info("Compression is disabled because no compress method is available.");let R=h&&c!==void 0,H=R?await c(E):E;R&&(y["content-encoding"]="gzip");let ee=u.method==="GET"?{...u.data,...m.data}:{},O={...i,...u.queryParameters,...ee};if(l.value&&(O["x-algolia-agent"]=l.value),m&&m.queryParameters)for(let P of Object.keys(m.queryParameters))!m.queryParameters[P]||Object.prototype.toString.call(m.queryParameters[P])==="[object Object]"?O[P]=m.queryParameters[P]:O[P]=m.queryParameters[P].toString();let B=0,L=async(P,C)=>{let v=P.pop();if(v===void 0)throw new ne(Pe(q));let I={...f,...m.timeouts},k={data:H,headers:y,method:u.method,url:ce(v,u.path,O),connectTimeout:C(B,I.connect),responseTimeout:C(B,A?I.read:I.write)},$=N=>{let G={request:k,response:N,host:v,triesLeft:P.length};return q.push(G),G},w=await a.send(k);if(fe(w)){let N=$(w);return w.isTimedOut&&B++,r.info("Retryable failure",X(N)),await e.set(v,Q(v,w.isTimedOut?"timed out":"down")),L(P,C)}if(ge(w))return de(w);throw $(w),pe(w,q)},te=t.filter(P=>P.accept==="readWrite"||(A?P.accept==="read":P.accept==="write")),U=await g(te);return L([...U.hosts].reverse(),U.getTimeout)}function T(u,m={}){let A=()=>p(u,m,q),q=u.useReadTransporter||u.method==="GET";if((m.cacheable||u.cacheable)!==!0)return A();let y={request:u,requestOptions:m,transporter:{queryParameters:i,headers:s}};return n.get(y,()=>o.get(y,()=>o.set(y,A()).then(h=>Promise.all([o.delete(y),h]),h=>Promise.all([o.delete(y),Promise.reject(h)])).then(([h,R])=>R)),{miss:h=>n.set(y,h)})}return{hostsCache:e,requester:a,timeouts:f,logger:r,algoliaAgent:l,baseHeaders:s,baseQueryParameters:i,hosts:t,request:T,requestsCache:o,responsesCache:n}}function Y(){function t(e){return new Promise(s=>{let r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach(a=>r.setRequestHeader(a,e.headers[a]));let i=(a,o)=>setTimeout(()=>{r.abort(),s({status:0,content:o,isTimedOut:!0})},a),l=i(e.connectTimeout,"Connection timeout"),f;r.onreadystatechange=()=>{r.readyState>r.OPENED&&f===void 0&&(clearTimeout(l),f=i(e.responseTimeout,"Socket timeout"))},r.onerror=()=>{r.status===0&&(clearTimeout(l),clearTimeout(f),s({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=()=>{clearTimeout(l),clearTimeout(f),s({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)})}return{send:t}}var S="1.18.0",_=["de","us"];function Te(t){return[{url:t?"analytics.{region}.algolia.com".replace("{region}",t):"analytics.algolia.com",accept:"readWrite",protocol:"https"}]}function Z({appId:t,apiKey:e,authMode:s,algoliaAgents:r,region:i,...l}){let f=z(t,e,s),a=K({hosts:Te(i),...l,algoliaAgent:J({algoliaAgents:r,client:"AbtestingV3",version:S}),baseHeaders:{"content-type":"text/plain",...f.headers(),...l.baseHeaders},baseQueryParameters:{...f.queryParameters(),...l.baseQueryParameters}});return{transporter:a,appId:t,apiKey:e,clearCache(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then(()=>{})},get _ua(){return a.algoliaAgent.value},addAlgoliaAgent(o,n){a.algoliaAgent.add({segment:o,version:n})},setClientApiKey({apiKey:o}){!s||s==="WithinHeaders"?a.baseHeaders["x-algolia-api-key"]=o:a.baseQueryParameters["x-algolia-api-key"]=o},addABTests(o,n){if(!o)throw new Error("Parameter `addABTestsRequest` is required when calling `addABTests`.");if(!o.name)throw new Error("Parameter `addABTestsRequest.name` is required when calling `addABTests`.");if(!o.variants)throw new Error("Parameter `addABTestsRequest.variants` is required when calling `addABTests`.");if(!o.metrics)throw new Error("Parameter `addABTestsRequest.metrics` is required when calling `addABTests`.");if(!o.endAt)throw new Error("Parameter `addABTestsRequest.endAt` is required when calling `addABTests`.");let p={method:"POST",path:"/3/abtests",queryParameters:{},headers:{},data:o};return a.request(p,n)},customDelete({path:o,parameters:n},c){if(!o)throw new Error("Parameter `path` is required when calling `customDelete`.");let T={method:"DELETE",path:"/{path}".replace("{path}",o),queryParameters:n||{},headers:{}};return a.request(T,c)},customGet({path:o,parameters:n},c){if(!o)throw new Error("Parameter `path` is required when calling `customGet`.");let T={method:"GET",path:"/{path}".replace("{path}",o),queryParameters:n||{},headers:{}};return a.request(T,c)},customPost({path:o,parameters:n,body:c},d){if(!o)throw new Error("Parameter `path` is required when calling `customPost`.");let u={method:"POST",path:"/{path}".replace("{path}",o),queryParameters:n||{},headers:{},data:c||{}};return a.request(u,d)},customPut({path:o,parameters:n,body:c},d){if(!o)throw new Error("Parameter `path` is required when calling `customPut`.");let u={method:"PUT",path:"/{path}".replace("{path}",o),queryParameters:n||{},headers:{},data:c||{}};return a.request(u,d)},deleteABTest({id:o},n){if(!o)throw new Error("Parameter `id` is required when calling `deleteABTest`.");let p={method:"DELETE",path:"/3/abtests/{id}".replace("{id}",encodeURIComponent(o)),queryParameters:{},headers:{}};return a.request(p,n)},estimateABTest(o,n){if(!o)throw new Error("Parameter `estimateABTestRequest` is required when calling `estimateABTest`.");if(!o.configuration)throw new Error("Parameter `estimateABTestRequest.configuration` is required when calling `estimateABTest`.");if(!o.variants)throw new Error("Parameter `estimateABTestRequest.variants` is required when calling `estimateABTest`.");let p={method:"POST",path:"/3/abtests/estimate",queryParameters:{},headers:{},data:o};return a.request(p,n)},getABTest({id:o},n){if(!o)throw new Error("Parameter `id` is required when calling `getABTest`.");let p={method:"GET",path:"/3/abtests/{id}".replace("{id}",encodeURIComponent(o)),queryParameters:{},headers:{}};return a.request(p,n)},getTimeseries({id:o,startDate:n,endDate:c,metric:d},g){if(!o)throw new Error("Parameter `id` is required when calling `getTimeseries`.");let p="/3/abtests/{id}/timeseries".replace("{id}",encodeURIComponent(o)),T={},u={};n!==void 0&&(u.startDate=n.toString()),c!==void 0&&(u.endDate=c.toString()),d!==void 0&&(u.metric=d.toString());let m={method:"GET",path:p,queryParameters:u,headers:T};return a.request(m,g)},listABTests({offset:o,limit:n,indexPrefix:c,indexSuffix:d,direction:g}={},p=void 0){let T="/3/abtests",u={},m={};o!==void 0&&(m.offset=o.toString()),n!==void 0&&(m.limit=n.toString()),c!==void 0&&(m.indexPrefix=c.toString()),d!==void 0&&(m.indexSuffix=d.toString()),g!==void 0&&(m.direction=g.toString());let A={method:"GET",path:T,queryParameters:m,headers:u};return a.request(A,p)},stopABTest({id:o},n){if(!o)throw new Error("Parameter `id` is required when calling `stopABTest`.");let p={method:"POST",path:"/3/abtests/{id}/stop".replace("{id}",encodeURIComponent(o)),queryParameters:{},headers:{}};return a.request(p,n)}}}function lt(t,e,s,r){if(!t||typeof t!="string")throw new Error("`appId` is missing.");if(!e||typeof e!="string")throw new Error("`apiKey` is missing.");if(s&&(typeof s!="string"||!_.includes(s)))throw new Error(`\`region\` must be one of the following: ${_.join(", ")}`);let{compression:i,...l}=r||{};return Z({appId:t,apiKey:e,region:s,timeouts:{connect:1e3,read:2e3,write:3e4},logger:M(),requester:Y(),algoliaAgents:[{segment:"Browser"}],authMode:"WithinQueryParameters",responsesCache:b(),requestsCache:b({serializable:!1}),hostsCache:x({caches:[W({key:`${S}-${t}`}),b()]}),...l})}export{lt as abtestingV3Client,S as apiClientVersion}; //# sourceMappingURL=browser.min.js.map