diff --git a/THIRD_PARTY.txt b/THIRD_PARTY.txt
index 5a299a94..1d7c1419 100644
--- a/THIRD_PARTY.txt
+++ b/THIRD_PARTY.txt
@@ -137,6 +137,7 @@ https://cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validat
https://cdnjs.cloudflare.com/ajax/libs/ajax-bootstrap-select/1.4.5/js/ajax-bootstrap-select.min.js
https://cdnjs.cloudflare.com/ajax/libs/algoliasearch/3.35.1/algoliasearch.min.js
https://cdnjs.cloudflare.com/ajax/libs/algoliasearch/4.24.0/algoliasearch.umd.min.js
+https://cdnjs.cloudflare.com/ajax/libs/algoliasearch/5.3.0/algoliasearch.umd.min.js
https://cdnjs.cloudflare.com/ajax/libs/alpinejs/2.8.2/alpine.js
https://cdnjs.cloudflare.com/ajax/libs/alpinejs/3.14.1/cdn.min.js
https://cdnjs.cloudflare.com/ajax/libs/angucomplete-alt/3.0.0/angucomplete-alt.min.js
diff --git a/modules/internal/targets.js b/modules/internal/targets.js
index 3b4c7afb..ba288de8 100644
--- a/modules/internal/targets.js
+++ b/modules/internal/targets.js
@@ -81,6 +81,7 @@ targets.setLastVersion = function (type, version) {
if (type.startsWith('/ajax-bootstrap-select/1.')) return '1.4.5';
if (type.startsWith('/algoliasearch/3.')) return '3.35.1';
if (type.startsWith('/algoliasearch/4.')) return '4.24.0';
+ if (type.startsWith('/algoliasearch/5.')) return '5.3.0';
if (type.startsWith('/alpinejs/2.')) return '2.8.2';
if (type.startsWith('/alpinejs/3.')) return '3.14.1';
if (type.startsWith('/anchor-js/3.')) return '3.2.2';
diff --git a/pages/updates/updates.html b/pages/updates/updates.html
index 42469c80..e9c9d648 100644
--- a/pages/updates/updates.html
+++ b/pages/updates/updates.html
@@ -25,9 +25,9 @@
New in LocalCDN:
diff --git a/resources/algoliasearch/5.3.0/algoliasearch.min.jsm b/resources/algoliasearch/5.3.0/algoliasearch.min.jsm
new file mode 100644
index 00000000..a939d041
--- /dev/null
+++ b/resources/algoliasearch/5.3.0/algoliasearch.min.jsm
@@ -0,0 +1 @@
+!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).algoliasearch={})}(this,function(e){"use strict";function o(e,r,t="WithinHeaders"){let a={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return"WithinHeaders"===t?a:{}},queryParameters(){return"WithinQueryParameters"===t?a:{}}}}function d({func:a,validate:s,aggregator:i,error:n,timeout:o=()=>0}){let d=e=>new Promise((r,t)=>{a(e).then(e=>(i&&i(e),s(e)?r(e):n&&n.validate(e)?t(new Error(n.message(e))):setTimeout(()=>{d(e).then(r).catch(t)},o()))).catch(e=>{t(e)})});return d()}function h(a){let e,s="algolia-client-js-"+a.key;function i(){return e=void 0===e?a.localStorage||window.localStorage:e}function n(){return JSON.parse(i().getItem(s)||"{}")}function o(e){i().setItem(s,JSON.stringify(e))}return{get(e,r,t={miss:()=>Promise.resolve()}){return Promise.resolve().then(()=>{{let t=a.timeToLive?1e3*a.timeToLive:null,e=n(),r=Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e.timestamp));o(r),t&&o(Object.fromEntries(Object.entries(r).filter(([,e])=>{var r=(new Date).getTime();return!(e.timestamp+tPromise.all([e?e.value:r(),void 0!==e])).then(([e,r])=>Promise.all([e,r||t.miss(e)])).then(([e])=>e)},set(r,t){return Promise.resolve().then(()=>{let e=n();return e[JSON.stringify(r)]={timestamp:(new Date).getTime(),value:t},i().setItem(s,JSON.stringify(e)),t})},delete(r){return Promise.resolve().then(()=>{let e=n();delete e[JSON.stringify(r)],i().setItem(s,JSON.stringify(e))})},clear(){return Promise.resolve().then(()=>{i().removeItem(s)})}}}function l(e){let a=[...e.caches],s=a.shift();return void 0===s?{get(e,r,t={miss:()=>Promise.resolve()}){return r().then(e=>Promise.all([e,t.miss(e)])).then(([e])=>e)},set(e,r){return Promise.resolve(r)},delete(e){return Promise.resolve()},clear(){return Promise.resolve()}}:{get(e,r,t={miss:()=>Promise.resolve()}){return s.get(e,r,t).catch(()=>l({caches:a}).get(e,r,t))},set(e,r){return s.set(e,r).catch(()=>l({caches:a}).set(e,r))},delete(e){return s.delete(e).catch(()=>l({caches:a}).delete(e))},clear(){return s.clear().catch(()=>l({caches:a}).clear())}}}function c(s={serializable:!0}){let i={};return{get(e,r,t={miss:()=>Promise.resolve()}){e=JSON.stringify(e);if(e in i)return Promise.resolve(s.serializable?JSON.parse(i[e]):i[e]);let a=r();return a.then(e=>t.miss(e)).then(()=>a)},set(e,r){return i[JSON.stringify(e)]=s.serializable?JSON.stringify(r):r,Promise.resolve(r)},delete(e){return delete i[JSON.stringify(e)],Promise.resolve()},clear(){return i={},Promise.resolve()}}}function E(e,r="up"){let t=Date.now();return{...e,status:r,lastUpdate:t,isUp:function(){return"up"===r||12e4void 0!==i[e]).sort().map(e=>e+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(i[e])?i[e].join(","):i[e]).replaceAll("+","%20")).join("&"),s=`${e.protocol}://${e.url}${e.port?":"+e.port:""}/`+("/"===r.charAt(0)?r.substring(1):r);var i;return a.length&&(s+="?"+a),s}function D(e){var r=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...r}}}}function u({hosts:s,hostsCache:q,baseHeaders:i,baseQueryParameters:n,algoliaAgent:o,timeouts:f,requester:x,requestsCache:d,responsesCache:h}){async function l(l,c,u=!0){let m=[],p=function(e,r){if("GET"!==e.method&&(void 0!==e.data||void 0!==r.data))return e=Array.isArray(e.data)?e.data:{...e.data,...r.data},JSON.stringify(e)}(l,c),g=function(e,r,t){let a={Accept:"application/json",...e,...r,...t},s={};return Object.keys(a).forEach(e=>{var r=a[e];s[e.toLowerCase()]=r}),s}(i,l.headers,c.headers),e="GET"===l.method?{...l.data,...c.data}:{},w={...n,...l.queryParameters,...e};if(o.value&&(w["x-algolia-agent"]=o.value),c&&c.queryParameters)for(var r of Object.keys(c.queryParameters))c.queryParameters[r]&&"[object Object]"!==Object.prototype.toString.call(c.queryParameters[r])?w[r]=c.queryParameters[r].toString():w[r]=c.queryParameters[r];let P=0,y=async(r,e)=>{let t=r.pop();if(void 0===t)throw new v(m.map(e=>D(e)));var a,s;let i={...f,...c.timeouts},n={data:p,headers:g,method:l.method,url:I(t,l.path,w),connectTimeout:e(P,i.connect),responseTimeout:e(P,u?i.read:i.write)},o=e=>{e={request:n,response:e,host:t,triesLeft:r.length};return m.push(e),e},d=await x.send(n);if({isTimedOut:a,status:h}=[d][0],a||({isTimedOut:a,status:s}=[{isTimedOut:a,status:h}][0],!a&&0==~~s)||2!=~~(h/100)&&4!=~~(h/100))return a=o(d),d.isTimedOut&&P++,console.log("Retryable failure",D(a)),await q.set(t,E(t,d.isTimedOut?"timed out":"down")),y(r,e);if(s=d.status,2!=~~(s/100))throw o(d),function({content:e,status:r},t){try{var a=JSON.parse(e);return"error"in a?new T(a.message,r,a.error,t):new S(a.message,r,t)}catch{}return new S(e,r,t)}(d,m);var h=d;try{return JSON.parse(h.content)}catch(e){throw new b(e.message,h)}},t=s.filter(e=>"readWrite"===e.accept||(u?"read"===e.accept:"write"===e.accept)),a=await async function(e){let r=await Promise.all(e.map(e=>q.get(e,()=>Promise.resolve(E(e))))),t=r.filter(e=>e.isUp()),a=r.filter(e=>e.isTimedOut()),s=[...t,...a];return{hosts:0l(e,r);if(!0!==(r.cacheable||e.cacheable))return a();let s={request:e,requestOptions:r,transporter:{queryParameters:n,headers:i}};return h.get(s,()=>d.get(s,()=>d.set(s,a()).then(e=>Promise.all([d.delete(s),e]),e=>Promise.all([d.delete(s),Promise.reject(e)])).then(([,e])=>e)),{miss:e=>h.set(s,e)})},requestsCache:d,responsesCache:h}}function m({algoliaAgents:e,client:r,version:t}){let a=function(e){let r={value:`Algolia for JavaScript (${e})`,add(e){e="; "+e.segment+(void 0!==e.version?` (${e.version})`:"");return-1===r.value.indexOf(e)&&(r.value=r.value+e),r}};return r}(t).add({segment:r,version:t});return e.forEach(e=>a.add(e)),a}var p=1e3,g=2e3,w=3e4;function P(){return{send:function(i){return new Promise(t=>{let a=new XMLHttpRequest,e=(a.open(i.method,i.url,!0),Object.keys(i.headers).forEach(e=>a.setRequestHeader(e,i.headers[e])),(e,r)=>setTimeout(()=>{a.abort(),t({status:0,content:r,isTimedOut:!0})},e)),r=e(i.connectTimeout,"Connection timeout"),s;a.onreadystatechange=()=>{a.readyState>a.OPENED&&void 0===s&&(clearTimeout(r),s=e(i.responseTimeout,"Socket timeout"))},a.onerror=()=>{0===a.status&&(clearTimeout(r),clearTimeout(s),t({content:a.responseText||"Network request failed",status:a.status,isTimedOut:!1}))},a.onload=()=>{clearTimeout(r),clearTimeout(s),t({content:a.responseText,status:a.status,isTimedOut:!1})},a.send(i.data)})}}}var y="5.3.0",q=["de","us"];function a(r,t,a,s){if(!r||"string"!=typeof r)throw new Error("`appId` is missing.");if(!t||"string"!=typeof t)throw new Error("`apiKey` is missing.");if(!a||"string"==typeof a&&q.includes(a)){var{appId:t,apiKey:a,authMode:r,algoliaAgents:s,region:i,...n}=[{appId:r,apiKey:t,region:a,timeouts:{connect:p,read:g,write:w},requester:P(),algoliaAgents:[{segment:"Browser"}],authMode:"WithinQueryParameters",responsesCache:c(),requestsCache:c({serializable:!1}),hostsCache:l({caches:[h({key:y+"-"+r}),c()]}),...s}][0];let e=o(t,a,r);return{transporter:u({hosts:[{url:(a=i)?"analytics.{region}.algolia.com".replace("{region}",a):"analytics.algolia.com",accept:"readWrite",protocol:"https"}],...n,algoliaAgent:m({algoliaAgents:s,client:"Abtesting",version:y}),baseHeaders:{"content-type":"text/plain",...e.headers(),...n.baseHeaders},baseQueryParameters:{...e.queryParameters(),...n.baseQueryParameters}}),appId:t,clearCache(){return Promise.all([this.transporter.requestsCache.clear(),this.transporter.responsesCache.clear()]).then(()=>{})},get _ua(){return this.transporter.algoliaAgent.value},addAlgoliaAgent(e,r){this.transporter.algoliaAgent.add({segment:e,version:r})},setClientApiKey({apiKey:e}){this.transporter.baseHeaders["x-algolia-api-key"]=e},addABTests(e,r){if(!e)throw new Error("Parameter `addABTestsRequest` is required when calling `addABTests`.");if(!e.name)throw new Error("Parameter `addABTestsRequest.name` is required when calling `addABTests`.");if(!e.variants)throw new Error("Parameter `addABTestsRequest.variants` is required when calling `addABTests`.");if(e.endAt)return this.transporter.request({method:"POST",path:"/2/abtests",queryParameters:{},headers:{},data:e},r);throw new Error("Parameter `addABTestsRequest.endAt` is required when calling `addABTests`.")},customDelete({path:e,parameters:r},t){if(!e)throw new Error("Parameter `path` is required when calling `customDelete`.");e={method:"DELETE",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{}};return this.transporter.request(e,t)},customGet({path:e,parameters:r},t){if(!e)throw new Error("Parameter `path` is required when calling `customGet`.");e={method:"GET",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{}};return this.transporter.request(e,t)},customPost({path:e,parameters:r,body:t},a){if(!e)throw new Error("Parameter `path` is required when calling `customPost`.");e={method:"POST",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{},data:t||{}};return this.transporter.request(e,a)},customPut({path:e,parameters:r,body:t},a){if(!e)throw new Error("Parameter `path` is required when calling `customPut`.");e={method:"PUT",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{},data:t||{}};return this.transporter.request(e,a)},deleteABTest({id:e},r){if(!e)throw new Error("Parameter `id` is required when calling `deleteABTest`.");e={method:"DELETE",path:"/2/abtests/{id}".replace("{id}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},getABTest({id:e},r){if(!e)throw new Error("Parameter `id` is required when calling `getABTest`.");e={method:"GET",path:"/2/abtests/{id}".replace("{id}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},listABTests({offset:e,limit:r,indexPrefix:t,indexSuffix:a}={},s=void 0){let i={};void 0!==e&&(i.offset=e.toString()),void 0!==r&&(i.limit=r.toString()),void 0!==t&&(i.indexPrefix=t.toString()),void 0!==a&&(i.indexSuffix=a.toString());e={method:"GET",path:"/2/abtests",queryParameters:i,headers:{}};return this.transporter.request(e,s)},scheduleABTest(e,r){if(!e)throw new Error("Parameter `scheduleABTestsRequest` is required when calling `scheduleABTest`.");if(!e.name)throw new Error("Parameter `scheduleABTestsRequest.name` is required when calling `scheduleABTest`.");if(!e.variants)throw new Error("Parameter `scheduleABTestsRequest.variants` is required when calling `scheduleABTest`.");if(!e.scheduledAt)throw new Error("Parameter `scheduleABTestsRequest.scheduledAt` is required when calling `scheduleABTest`.");if(e.endAt)return this.transporter.request({method:"POST",path:"/2/abtests/schedule",queryParameters:{},headers:{},data:e},r);throw new Error("Parameter `scheduleABTestsRequest.endAt` is required when calling `scheduleABTest`.")},stopABTest({id:e},r){if(!e)throw new Error("Parameter `id` is required when calling `stopABTest`.");e={method:"POST",path:"/2/abtests/{id}/stop".replace("{id}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)}}}throw new Error("`region` must be one of the following: "+q.join(", "))}var f="5.3.0",x=["de","us"];function s(r,t,a,s){if(!r||"string"!=typeof r)throw new Error("`appId` is missing.");if(!t||"string"!=typeof t)throw new Error("`apiKey` is missing.");if(!a||"string"==typeof a&&x.includes(a)){var{appId:t,apiKey:a,authMode:r,algoliaAgents:s,region:i,...n}=[{appId:r,apiKey:t,region:a,timeouts:{connect:p,read:g,write:w},requester:P(),algoliaAgents:[{segment:"Browser"}],authMode:"WithinQueryParameters",responsesCache:c(),requestsCache:c({serializable:!1}),hostsCache:l({caches:[h({key:f+"-"+r}),c()]}),...s}][0];let e=o(t,a,r);return{transporter:u({hosts:[{url:(a=i)?"analytics.{region}.algolia.com".replace("{region}",a):"analytics.algolia.com",accept:"readWrite",protocol:"https"}],...n,algoliaAgent:m({algoliaAgents:s,client:"Analytics",version:f}),baseHeaders:{"content-type":"text/plain",...e.headers(),...n.baseHeaders},baseQueryParameters:{...e.queryParameters(),...n.baseQueryParameters}}),appId:t,clearCache(){return Promise.all([this.transporter.requestsCache.clear(),this.transporter.responsesCache.clear()]).then(()=>{})},get _ua(){return this.transporter.algoliaAgent.value},addAlgoliaAgent(e,r){this.transporter.algoliaAgent.add({segment:e,version:r})},setClientApiKey({apiKey:e}){this.transporter.baseHeaders["x-algolia-api-key"]=e},customDelete({path:e,parameters:r},t){if(!e)throw new Error("Parameter `path` is required when calling `customDelete`.");e={method:"DELETE",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{}};return this.transporter.request(e,t)},customGet({path:e,parameters:r},t){if(!e)throw new Error("Parameter `path` is required when calling `customGet`.");e={method:"GET",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{}};return this.transporter.request(e,t)},customPost({path:e,parameters:r,body:t},a){if(!e)throw new Error("Parameter `path` is required when calling `customPost`.");e={method:"POST",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{},data:t||{}};return this.transporter.request(e,a)},customPut({path:e,parameters:r,body:t},a){if(!e)throw new Error("Parameter `path` is required when calling `customPut`.");e={method:"PUT",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{},data:t||{}};return this.transporter.request(e,a)},getAddToCartRate({index:e,startDate:r,endDate:t,tags:a},s){if(!e)throw new Error("Parameter `index` is required when calling `getAddToCartRate`.");let i={};void 0!==e&&(i.index=e.toString()),void 0!==r&&(i.startDate=r.toString()),void 0!==t&&(i.endDate=t.toString()),void 0!==a&&(i.tags=a.toString());e={method:"GET",path:"/2/conversions/addToCartRate",queryParameters:i,headers:{}};return this.transporter.request(e,s)},getAverageClickPosition({index:e,startDate:r,endDate:t,tags:a},s){if(!e)throw new Error("Parameter `index` is required when calling `getAverageClickPosition`.");let i={};void 0!==e&&(i.index=e.toString()),void 0!==r&&(i.startDate=r.toString()),void 0!==t&&(i.endDate=t.toString()),void 0!==a&&(i.tags=a.toString());e={method:"GET",path:"/2/clicks/averageClickPosition",queryParameters:i,headers:{}};return this.transporter.request(e,s)},getClickPositions({index:e,startDate:r,endDate:t,tags:a},s){if(!e)throw new Error("Parameter `index` is required when calling `getClickPositions`.");let i={};void 0!==e&&(i.index=e.toString()),void 0!==r&&(i.startDate=r.toString()),void 0!==t&&(i.endDate=t.toString()),void 0!==a&&(i.tags=a.toString());e={method:"GET",path:"/2/clicks/positions",queryParameters:i,headers:{}};return this.transporter.request(e,s)},getClickThroughRate({index:e,startDate:r,endDate:t,tags:a},s){if(!e)throw new Error("Parameter `index` is required when calling `getClickThroughRate`.");let i={};void 0!==e&&(i.index=e.toString()),void 0!==r&&(i.startDate=r.toString()),void 0!==t&&(i.endDate=t.toString()),void 0!==a&&(i.tags=a.toString());e={method:"GET",path:"/2/clicks/clickThroughRate",queryParameters:i,headers:{}};return this.transporter.request(e,s)},getConversionRate({index:e,startDate:r,endDate:t,tags:a},s){if(!e)throw new Error("Parameter `index` is required when calling `getConversionRate`.");let i={};void 0!==e&&(i.index=e.toString()),void 0!==r&&(i.startDate=r.toString()),void 0!==t&&(i.endDate=t.toString()),void 0!==a&&(i.tags=a.toString());e={method:"GET",path:"/2/conversions/conversionRate",queryParameters:i,headers:{}};return this.transporter.request(e,s)},getNoClickRate({index:e,startDate:r,endDate:t,tags:a},s){if(!e)throw new Error("Parameter `index` is required when calling `getNoClickRate`.");let i={};void 0!==e&&(i.index=e.toString()),void 0!==r&&(i.startDate=r.toString()),void 0!==t&&(i.endDate=t.toString()),void 0!==a&&(i.tags=a.toString());e={method:"GET",path:"/2/searches/noClickRate",queryParameters:i,headers:{}};return this.transporter.request(e,s)},getNoResultsRate({index:e,startDate:r,endDate:t,tags:a},s){if(!e)throw new Error("Parameter `index` is required when calling `getNoResultsRate`.");let i={};void 0!==e&&(i.index=e.toString()),void 0!==r&&(i.startDate=r.toString()),void 0!==t&&(i.endDate=t.toString()),void 0!==a&&(i.tags=a.toString());e={method:"GET",path:"/2/searches/noResultRate",queryParameters:i,headers:{}};return this.transporter.request(e,s)},getPurchaseRate({index:e,startDate:r,endDate:t,tags:a},s){if(!e)throw new Error("Parameter `index` is required when calling `getPurchaseRate`.");let i={};void 0!==e&&(i.index=e.toString()),void 0!==r&&(i.startDate=r.toString()),void 0!==t&&(i.endDate=t.toString()),void 0!==a&&(i.tags=a.toString());e={method:"GET",path:"/2/conversions/purchaseRate",queryParameters:i,headers:{}};return this.transporter.request(e,s)},getRevenue({index:e,startDate:r,endDate:t,tags:a},s){if(!e)throw new Error("Parameter `index` is required when calling `getRevenue`.");let i={};void 0!==e&&(i.index=e.toString()),void 0!==r&&(i.startDate=r.toString()),void 0!==t&&(i.endDate=t.toString()),void 0!==a&&(i.tags=a.toString());e={method:"GET",path:"/2/conversions/revenue",queryParameters:i,headers:{}};return this.transporter.request(e,s)},getSearchesCount({index:e,startDate:r,endDate:t,tags:a},s){if(!e)throw new Error("Parameter `index` is required when calling `getSearchesCount`.");let i={};void 0!==e&&(i.index=e.toString()),void 0!==r&&(i.startDate=r.toString()),void 0!==t&&(i.endDate=t.toString()),void 0!==a&&(i.tags=a.toString());e={method:"GET",path:"/2/searches/count",queryParameters:i,headers:{}};return this.transporter.request(e,s)},getSearchesNoClicks({index:e,startDate:r,endDate:t,limit:a,offset:s,tags:i},n){if(!e)throw new Error("Parameter `index` is required when calling `getSearchesNoClicks`.");let o={};void 0!==e&&(o.index=e.toString()),void 0!==r&&(o.startDate=r.toString()),void 0!==t&&(o.endDate=t.toString()),void 0!==a&&(o.limit=a.toString()),void 0!==s&&(o.offset=s.toString()),void 0!==i&&(o.tags=i.toString());e={method:"GET",path:"/2/searches/noClicks",queryParameters:o,headers:{}};return this.transporter.request(e,n)},getSearchesNoResults({index:e,startDate:r,endDate:t,limit:a,offset:s,tags:i},n){if(!e)throw new Error("Parameter `index` is required when calling `getSearchesNoResults`.");let o={};void 0!==e&&(o.index=e.toString()),void 0!==r&&(o.startDate=r.toString()),void 0!==t&&(o.endDate=t.toString()),void 0!==a&&(o.limit=a.toString()),void 0!==s&&(o.offset=s.toString()),void 0!==i&&(o.tags=i.toString());e={method:"GET",path:"/2/searches/noResults",queryParameters:o,headers:{}};return this.transporter.request(e,n)},getStatus({index:e},r){if(!e)throw new Error("Parameter `index` is required when calling `getStatus`.");let t={};void 0!==e&&(t.index=e.toString());e={method:"GET",path:"/2/status",queryParameters:t,headers:{}};return this.transporter.request(e,r)},getTopCountries({index:e,startDate:r,endDate:t,limit:a,offset:s,tags:i},n){if(!e)throw new Error("Parameter `index` is required when calling `getTopCountries`.");let o={};void 0!==e&&(o.index=e.toString()),void 0!==r&&(o.startDate=r.toString()),void 0!==t&&(o.endDate=t.toString()),void 0!==a&&(o.limit=a.toString()),void 0!==s&&(o.offset=s.toString()),void 0!==i&&(o.tags=i.toString());e={method:"GET",path:"/2/countries",queryParameters:o,headers:{}};return this.transporter.request(e,n)},getTopFilterAttributes({index:e,search:r,startDate:t,endDate:a,limit:s,offset:i,tags:n},o){if(!e)throw new Error("Parameter `index` is required when calling `getTopFilterAttributes`.");let d={};void 0!==e&&(d.index=e.toString()),void 0!==r&&(d.search=r.toString()),void 0!==t&&(d.startDate=t.toString()),void 0!==a&&(d.endDate=a.toString()),void 0!==s&&(d.limit=s.toString()),void 0!==i&&(d.offset=i.toString()),void 0!==n&&(d.tags=n.toString());e={method:"GET",path:"/2/filters",queryParameters:d,headers:{}};return this.transporter.request(e,o)},getTopFilterForAttribute({attribute:e,index:r,search:t,startDate:a,endDate:s,limit:i,offset:n,tags:o},d){if(!e)throw new Error("Parameter `attribute` is required when calling `getTopFilterForAttribute`.");if(!r)throw new Error("Parameter `index` is required when calling `getTopFilterForAttribute`.");let h="/2/filters/{attribute}".replace("{attribute}",encodeURIComponent(e)),l={};void 0!==r&&(l.index=r.toString()),void 0!==t&&(l.search=t.toString()),void 0!==a&&(l.startDate=a.toString()),void 0!==s&&(l.endDate=s.toString()),void 0!==i&&(l.limit=i.toString()),void 0!==n&&(l.offset=n.toString()),void 0!==o&&(l.tags=o.toString());e={method:"GET",path:h,queryParameters:l,headers:{}};return this.transporter.request(e,d)},getTopFiltersNoResults({index:e,search:r,startDate:t,endDate:a,limit:s,offset:i,tags:n},o){if(!e)throw new Error("Parameter `index` is required when calling `getTopFiltersNoResults`.");let d={};void 0!==e&&(d.index=e.toString()),void 0!==r&&(d.search=r.toString()),void 0!==t&&(d.startDate=t.toString()),void 0!==a&&(d.endDate=a.toString()),void 0!==s&&(d.limit=s.toString()),void 0!==i&&(d.offset=i.toString()),void 0!==n&&(d.tags=n.toString());e={method:"GET",path:"/2/filters/noResults",queryParameters:d,headers:{}};return this.transporter.request(e,o)},getTopHits({index:e,search:r,clickAnalytics:t,revenueAnalytics:a,startDate:s,endDate:i,limit:n,offset:o,tags:d},h){if(!e)throw new Error("Parameter `index` is required when calling `getTopHits`.");let l={};void 0!==e&&(l.index=e.toString()),void 0!==r&&(l.search=r.toString()),void 0!==t&&(l.clickAnalytics=t.toString()),void 0!==a&&(l.revenueAnalytics=a.toString()),void 0!==s&&(l.startDate=s.toString()),void 0!==i&&(l.endDate=i.toString()),void 0!==n&&(l.limit=n.toString()),void 0!==o&&(l.offset=o.toString()),void 0!==d&&(l.tags=d.toString());e={method:"GET",path:"/2/hits",queryParameters:l,headers:{}};return this.transporter.request(e,h)},getTopSearches({index:e,clickAnalytics:r,revenueAnalytics:t,startDate:a,endDate:s,orderBy:i,direction:n,limit:o,offset:d,tags:h},l){if(!e)throw new Error("Parameter `index` is required when calling `getTopSearches`.");let c={};void 0!==e&&(c.index=e.toString()),void 0!==r&&(c.clickAnalytics=r.toString()),void 0!==t&&(c.revenueAnalytics=t.toString()),void 0!==a&&(c.startDate=a.toString()),void 0!==s&&(c.endDate=s.toString()),void 0!==i&&(c.orderBy=i.toString()),void 0!==n&&(c.direction=n.toString()),void 0!==o&&(c.limit=o.toString()),void 0!==d&&(c.offset=d.toString()),void 0!==h&&(c.tags=h.toString());e={method:"GET",path:"/2/searches",queryParameters:c,headers:{}};return this.transporter.request(e,l)},getUsersCount({index:e,startDate:r,endDate:t,tags:a},s){if(!e)throw new Error("Parameter `index` is required when calling `getUsersCount`.");let i={};void 0!==e&&(i.index=e.toString()),void 0!==r&&(i.startDate=r.toString()),void 0!==t&&(i.endDate=t.toString()),void 0!==a&&(i.tags=a.toString());e={method:"GET",path:"/2/users/count",queryParameters:i,headers:{}};return this.transporter.request(e,s)}}}throw new Error("`region` must be one of the following: "+x.join(", "))}var R="5.3.0",N=["eu","us"];function i(r,t,a,s){if(!r||"string"!=typeof r)throw new Error("`appId` is missing.");if(!t||"string"!=typeof t)throw new Error("`apiKey` is missing.");if(a&&"string"==typeof a&&N.includes(a)){var{appId:t,apiKey:a,authMode:r,algoliaAgents:s,region:i,...n}=[{appId:r,apiKey:t,region:a,timeouts:{connect:p,read:g,write:w},requester:P(),algoliaAgents:[{segment:"Browser"}],authMode:"WithinQueryParameters",responsesCache:c(),requestsCache:c({serializable:!1}),hostsCache:l({caches:[h({key:R+"-"+r}),c()]}),...s}][0];let e=o(t,a,r);return{transporter:u({hosts:[{url:"personalization.{region}.algolia.com".replace("{region}",i),accept:"readWrite",protocol:"https"}],...n,algoliaAgent:m({algoliaAgents:s,client:"Personalization",version:R}),baseHeaders:{"content-type":"text/plain",...e.headers(),...n.baseHeaders},baseQueryParameters:{...e.queryParameters(),...n.baseQueryParameters}}),appId:t,clearCache(){return Promise.all([this.transporter.requestsCache.clear(),this.transporter.responsesCache.clear()]).then(()=>{})},get _ua(){return this.transporter.algoliaAgent.value},addAlgoliaAgent(e,r){this.transporter.algoliaAgent.add({segment:e,version:r})},setClientApiKey({apiKey:e}){this.transporter.baseHeaders["x-algolia-api-key"]=e},customDelete({path:e,parameters:r},t){if(!e)throw new Error("Parameter `path` is required when calling `customDelete`.");e={method:"DELETE",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{}};return this.transporter.request(e,t)},customGet({path:e,parameters:r},t){if(!e)throw new Error("Parameter `path` is required when calling `customGet`.");e={method:"GET",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{}};return this.transporter.request(e,t)},customPost({path:e,parameters:r,body:t},a){if(!e)throw new Error("Parameter `path` is required when calling `customPost`.");e={method:"POST",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{},data:t||{}};return this.transporter.request(e,a)},customPut({path:e,parameters:r,body:t},a){if(!e)throw new Error("Parameter `path` is required when calling `customPut`.");e={method:"PUT",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{},data:t||{}};return this.transporter.request(e,a)},deleteUserProfile({userToken:e},r){if(!e)throw new Error("Parameter `userToken` is required when calling `deleteUserProfile`.");e={method:"DELETE",path:"/1/profiles/{userToken}".replace("{userToken}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},getPersonalizationStrategy(e){return this.transporter.request({method:"GET",path:"/1/strategies/personalization",queryParameters:{},headers:{}},e)},getUserTokenProfile({userToken:e},r){if(!e)throw new Error("Parameter `userToken` is required when calling `getUserTokenProfile`.");e={method:"GET",path:"/1/profiles/personalization/{userToken}".replace("{userToken}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},setPersonalizationStrategy(e,r){if(!e)throw new Error("Parameter `personalizationStrategyParams` is required when calling `setPersonalizationStrategy`.");if(!e.eventScoring)throw new Error("Parameter `personalizationStrategyParams.eventScoring` is required when calling `setPersonalizationStrategy`.");if(!e.facetScoring)throw new Error("Parameter `personalizationStrategyParams.facetScoring` is required when calling `setPersonalizationStrategy`.");if(e.personalizationImpact)return this.transporter.request({method:"POST",path:"/1/strategies/personalization",queryParameters:{},headers:{},data:e},r);throw new Error("Parameter `personalizationStrategyParams.personalizationImpact` is required when calling `setPersonalizationStrategy`.")}}}throw new Error("`region` is required and must be one of the following: "+N.join(", "))}var A="5.3.0";function C({appId:e,apiKey:r,authMode:t,algoliaAgents:a,...s}){let i=o(e,r,t);return{transporter:u({hosts:[{url:e+"-dsn.algolia.net",accept:"read",protocol:"https"},{url:e+".algolia.net",accept:"write",protocol:"https"}].concat(n([{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"}])),...s,algoliaAgent:m({algoliaAgents:a,client:"Search",version:A}),baseHeaders:{"content-type":"text/plain",...i.headers(),...s.baseHeaders},baseQueryParameters:{...i.queryParameters(),...s.baseQueryParameters}}),appId:e,clearCache(){return Promise.all([this.transporter.requestsCache.clear(),this.transporter.responsesCache.clear()]).then(()=>{})},get _ua(){return this.transporter.algoliaAgent.value},addAlgoliaAgent(e,r){this.transporter.algoliaAgent.add({segment:e,version:r})},setClientApiKey({apiKey:e}){this.transporter.baseHeaders["x-algolia-api-key"]=e},waitForTask({indexName:e,taskID:r,maxRetries:t=50,timeout:a=e=>Math.min(200*e,5e3)},s){let i=0;return d({func:()=>this.getTask({indexName:e,taskID:r},s),validate:e=>"published"===e.status,aggregator:()=>i+=1,error:{validate:()=>i>=t,message:()=>`The maximum number of retries exceeded. (${i}/${t})`},timeout:()=>a(i)})},waitForAppTask({taskID:e,maxRetries:r=50,timeout:t=e=>Math.min(200*e,5e3)},a){let s=0;return d({func:()=>this.getAppTask({taskID:e},a),validate:e=>"published"===e.status,aggregator:()=>s+=1,error:{validate:()=>s>=r,message:()=>`The maximum number of retries exceeded. (${s}/${r})`},timeout:()=>t(s)})},waitForApiKey({operation:r,key:e,apiKey:s,maxRetries:t=50,timeout:a=e=>Math.min(200*e,5e3)},i){let n=0,o={aggregator:()=>n+=1,error:{validate:()=>n>=t,message:()=>`The maximum number of retries exceeded. (${n}/${t})`},timeout:()=>a(n)};if("update"!==r)return d({...o,func:()=>this.getApiKey({key:e},i).catch(e=>{if(404!==e.status)throw e}),validate:e=>"add"===r?void 0!==e:void 0===e});if(s)return d({...o,func:()=>this.getApiKey({key:e},i),validate:r=>{for(var a of Object.keys(s)){let e=s[a],t=r[a];if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length||e.some((e,r)=>e!==t[r]))return!1}else if(e!==t)return!1}return!0}});throw new Error("`apiKey` is required when waiting for an `update` operation.")},browseObjects({indexName:r,browseParams:t,...e},a){return d({func:e=>this.browse({indexName:r,browseParams:{cursor:e?e.cursor:void 0,...t}},a),validate:e=>void 0===e.cursor,...e})},browseRules({indexName:r,searchRulesParams:e,...t},a){let s={hitsPerPage:1e3,...e};return d({func:e=>this.searchRules({indexName:r,searchRulesParams:{...s,page:e?e.page+1:s.page||0}},a),validate:e=>e.nbHits{var r=this.searchSynonyms({indexName:t,searchSynonymsParams:{...s,page:s.page}},a);return s.page+=1,r},validate:e=>e.nbHits({objectID:e})),action:"deleteObject"},t)},async partialUpdateObjects({indexName:e,objects:r,createIfNotExists:t},a){return this.chunkedBatch({indexName:e,objects:r,action:t?"partialUpdateObject":"partialUpdateObjectNoCreate"},a)},async replaceAllObjects({indexName:e,objects:r,batchSize:t},a){var s=e+"_tmp_"+(Math.floor(1e6*Math.random())+1e5),i=await this.operationIndex({indexName:e,operationIndexParams:{operation:"copy",destination:s,scope:["settings","rules","synonyms"]}},a),r=await this.chunkedBatch({indexName:s,objects:r,waitForTasks:!0,batchSize:t},a),t=(await this.waitForTask({indexName:s,taskID:i.taskID}),i=await this.operationIndex({indexName:e,operationIndexParams:{operation:"copy",destination:s,scope:["settings","rules","synonyms"]}},a),await this.waitForTask({indexName:s,taskID:i.taskID}),await this.operationIndex({indexName:s,operationIndexParams:{operation:"move",destination:e}},a));return await this.waitForTask({indexName:s,taskID:t.taskID}),{copyOperationResponse:i,batchResponses:r,moveOperationResponse:t}},async indexExists({indexName:e}){try{await this.getSettings({indexName:e})}catch(e){if(e instanceof S&&404===e.status)return!1;throw e}return!0},searchForHits(e,r){return this.search(e,r)},searchForFacets(e,r){return this.search(e,r)},addApiKey(e,r){if(!e)throw new Error("Parameter `apiKey` is required when calling `addApiKey`.");if(e.acl)return this.transporter.request({method:"POST",path:"/1/keys",queryParameters:{},headers:{},data:e},r);throw new Error("Parameter `apiKey.acl` is required when calling `addApiKey`.")},addOrUpdateObject({indexName:e,objectID:r,body:t},a){if(!e)throw new Error("Parameter `indexName` is required when calling `addOrUpdateObject`.");if(!r)throw new Error("Parameter `objectID` is required when calling `addOrUpdateObject`.");if(!t)throw new Error("Parameter `body` is required when calling `addOrUpdateObject`.");e={method:"PUT",path:"/1/indexes/{indexName}/{objectID}".replace("{indexName}",encodeURIComponent(e)).replace("{objectID}",encodeURIComponent(r)),queryParameters:{},headers:{},data:t};return this.transporter.request(e,a)},appendSource(e,r){if(!e)throw new Error("Parameter `source` is required when calling `appendSource`.");if(e.source)return this.transporter.request({method:"POST",path:"/1/security/sources/append",queryParameters:{},headers:{},data:e},r);throw new Error("Parameter `source.source` is required when calling `appendSource`.")},assignUserId({xAlgoliaUserID:e,assignUserIdParams:r},t){if(!e)throw new Error("Parameter `xAlgoliaUserID` is required when calling `assignUserId`.");if(!r)throw new Error("Parameter `assignUserIdParams` is required when calling `assignUserId`.");if(!r.cluster)throw new Error("Parameter `assignUserIdParams.cluster` is required when calling `assignUserId`.");let a={};void 0!==e&&(a["X-Algolia-User-ID"]=e.toString());e={method:"POST",path:"/1/clusters/mapping",queryParameters:{},headers:a,data:r};return this.transporter.request(e,t)},batch({indexName:e,batchWriteParams:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `batch`.");if(!r)throw new Error("Parameter `batchWriteParams` is required when calling `batch`.");if(!r.requests)throw new Error("Parameter `batchWriteParams.requests` is required when calling `batch`.");e={method:"POST",path:"/1/indexes/{indexName}/batch".replace("{indexName}",encodeURIComponent(e)),queryParameters:{},headers:{},data:r};return this.transporter.request(e,t)},batchAssignUserIds({xAlgoliaUserID:e,batchAssignUserIdsParams:r},t){if(!e)throw new Error("Parameter `xAlgoliaUserID` is required when calling `batchAssignUserIds`.");if(!r)throw new Error("Parameter `batchAssignUserIdsParams` is required when calling `batchAssignUserIds`.");if(!r.cluster)throw new Error("Parameter `batchAssignUserIdsParams.cluster` is required when calling `batchAssignUserIds`.");if(!r.users)throw new Error("Parameter `batchAssignUserIdsParams.users` is required when calling `batchAssignUserIds`.");let a={};void 0!==e&&(a["X-Algolia-User-ID"]=e.toString());e={method:"POST",path:"/1/clusters/mapping/batch",queryParameters:{},headers:a,data:r};return this.transporter.request(e,t)},batchDictionaryEntries({dictionaryName:e,batchDictionaryEntriesParams:r},t){if(!e)throw new Error("Parameter `dictionaryName` is required when calling `batchDictionaryEntries`.");if(!r)throw new Error("Parameter `batchDictionaryEntriesParams` is required when calling `batchDictionaryEntries`.");if(!r.requests)throw new Error("Parameter `batchDictionaryEntriesParams.requests` is required when calling `batchDictionaryEntries`.");e={method:"POST",path:"/1/dictionaries/{dictionaryName}/batch".replace("{dictionaryName}",encodeURIComponent(e)),queryParameters:{},headers:{},data:r};return this.transporter.request(e,t)},browse({indexName:e,browseParams:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `browse`.");e={method:"POST",path:"/1/indexes/{indexName}/browse".replace("{indexName}",encodeURIComponent(e)),queryParameters:{},headers:{},data:r||{}};return this.transporter.request(e,t)},clearObjects({indexName:e},r){if(!e)throw new Error("Parameter `indexName` is required when calling `clearObjects`.");e={method:"POST",path:"/1/indexes/{indexName}/clear".replace("{indexName}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},clearRules({indexName:e,forwardToReplicas:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `clearRules`.");let a="/1/indexes/{indexName}/rules/clear".replace("{indexName}",encodeURIComponent(e)),s={};void 0!==r&&(s.forwardToReplicas=r.toString());e={method:"POST",path:a,queryParameters:s,headers:{}};return this.transporter.request(e,t)},clearSynonyms({indexName:e,forwardToReplicas:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `clearSynonyms`.");let a="/1/indexes/{indexName}/synonyms/clear".replace("{indexName}",encodeURIComponent(e)),s={};void 0!==r&&(s.forwardToReplicas=r.toString());e={method:"POST",path:a,queryParameters:s,headers:{}};return this.transporter.request(e,t)},customDelete({path:e,parameters:r},t){if(!e)throw new Error("Parameter `path` is required when calling `customDelete`.");e={method:"DELETE",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{}};return this.transporter.request(e,t)},customGet({path:e,parameters:r},t){if(!e)throw new Error("Parameter `path` is required when calling `customGet`.");e={method:"GET",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{}};return this.transporter.request(e,t)},customPost({path:e,parameters:r,body:t},a){if(!e)throw new Error("Parameter `path` is required when calling `customPost`.");e={method:"POST",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{},data:t||{}};return this.transporter.request(e,a)},customPut({path:e,parameters:r,body:t},a){if(!e)throw new Error("Parameter `path` is required when calling `customPut`.");e={method:"PUT",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{},data:t||{}};return this.transporter.request(e,a)},deleteApiKey({key:e},r){if(!e)throw new Error("Parameter `key` is required when calling `deleteApiKey`.");e={method:"DELETE",path:"/1/keys/{key}".replace("{key}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},deleteBy({indexName:e,deleteByParams:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `deleteBy`.");if(!r)throw new Error("Parameter `deleteByParams` is required when calling `deleteBy`.");e={method:"POST",path:"/1/indexes/{indexName}/deleteByQuery".replace("{indexName}",encodeURIComponent(e)),queryParameters:{},headers:{},data:r};return this.transporter.request(e,t)},deleteIndex({indexName:e},r){if(!e)throw new Error("Parameter `indexName` is required when calling `deleteIndex`.");e={method:"DELETE",path:"/1/indexes/{indexName}".replace("{indexName}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},deleteObject({indexName:e,objectID:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `deleteObject`.");if(!r)throw new Error("Parameter `objectID` is required when calling `deleteObject`.");e={method:"DELETE",path:"/1/indexes/{indexName}/{objectID}".replace("{indexName}",encodeURIComponent(e)).replace("{objectID}",encodeURIComponent(r)),queryParameters:{},headers:{}};return this.transporter.request(e,t)},deleteRule({indexName:e,objectID:r,forwardToReplicas:t},a){if(!e)throw new Error("Parameter `indexName` is required when calling `deleteRule`.");if(!r)throw new Error("Parameter `objectID` is required when calling `deleteRule`.");let s="/1/indexes/{indexName}/rules/{objectID}".replace("{indexName}",encodeURIComponent(e)).replace("{objectID}",encodeURIComponent(r)),i={};void 0!==t&&(i.forwardToReplicas=t.toString());e={method:"DELETE",path:s,queryParameters:i,headers:{}};return this.transporter.request(e,a)},deleteSource({source:e},r){if(!e)throw new Error("Parameter `source` is required when calling `deleteSource`.");e={method:"DELETE",path:"/1/security/sources/{source}".replace("{source}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},deleteSynonym({indexName:e,objectID:r,forwardToReplicas:t},a){if(!e)throw new Error("Parameter `indexName` is required when calling `deleteSynonym`.");if(!r)throw new Error("Parameter `objectID` is required when calling `deleteSynonym`.");let s="/1/indexes/{indexName}/synonyms/{objectID}".replace("{indexName}",encodeURIComponent(e)).replace("{objectID}",encodeURIComponent(r)),i={};void 0!==t&&(i.forwardToReplicas=t.toString());e={method:"DELETE",path:s,queryParameters:i,headers:{}};return this.transporter.request(e,a)},getApiKey({key:e},r){if(!e)throw new Error("Parameter `key` is required when calling `getApiKey`.");e={method:"GET",path:"/1/keys/{key}".replace("{key}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},getAppTask({taskID:e},r){if(!e)throw new Error("Parameter `taskID` is required when calling `getAppTask`.");e={method:"GET",path:"/1/task/{taskID}".replace("{taskID}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},getDictionaryLanguages(e){return this.transporter.request({method:"GET",path:"/1/dictionaries/*/languages",queryParameters:{},headers:{}},e)},getDictionarySettings(e){return this.transporter.request({method:"GET",path:"/1/dictionaries/*/settings",queryParameters:{},headers:{}},e)},getLogs({offset:e,length:r,indexName:t,type:a}={},s=void 0){let i={};void 0!==e&&(i.offset=e.toString()),void 0!==r&&(i.length=r.toString()),void 0!==t&&(i.indexName=t.toString()),void 0!==a&&(i.type=a.toString());e={method:"GET",path:"/1/logs",queryParameters:i,headers:{}};return this.transporter.request(e,s)},getObject({indexName:e,objectID:r,attributesToRetrieve:t},a){if(!e)throw new Error("Parameter `indexName` is required when calling `getObject`.");if(!r)throw new Error("Parameter `objectID` is required when calling `getObject`.");let s="/1/indexes/{indexName}/{objectID}".replace("{indexName}",encodeURIComponent(e)).replace("{objectID}",encodeURIComponent(r)),i={};void 0!==t&&(i.attributesToRetrieve=t.toString());e={method:"GET",path:s,queryParameters:i,headers:{}};return this.transporter.request(e,a)},getObjects(e,r){if(!e)throw new Error("Parameter `getObjectsParams` is required when calling `getObjects`.");if(e.requests)return this.transporter.request({method:"POST",path:"/1/indexes/*/objects",queryParameters:{},headers:{},data:e,useReadTransporter:!0,cacheable:!0},r);throw new Error("Parameter `getObjectsParams.requests` is required when calling `getObjects`.")},getRule({indexName:e,objectID:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `getRule`.");if(!r)throw new Error("Parameter `objectID` is required when calling `getRule`.");e={method:"GET",path:"/1/indexes/{indexName}/rules/{objectID}".replace("{indexName}",encodeURIComponent(e)).replace("{objectID}",encodeURIComponent(r)),queryParameters:{},headers:{}};return this.transporter.request(e,t)},getSettings({indexName:e},r){if(!e)throw new Error("Parameter `indexName` is required when calling `getSettings`.");e={method:"GET",path:"/1/indexes/{indexName}/settings".replace("{indexName}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},getSources(e){return this.transporter.request({method:"GET",path:"/1/security/sources",queryParameters:{},headers:{}},e)},getSynonym({indexName:e,objectID:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `getSynonym`.");if(!r)throw new Error("Parameter `objectID` is required when calling `getSynonym`.");e={method:"GET",path:"/1/indexes/{indexName}/synonyms/{objectID}".replace("{indexName}",encodeURIComponent(e)).replace("{objectID}",encodeURIComponent(r)),queryParameters:{},headers:{}};return this.transporter.request(e,t)},getTask({indexName:e,taskID:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `getTask`.");if(!r)throw new Error("Parameter `taskID` is required when calling `getTask`.");e={method:"GET",path:"/1/indexes/{indexName}/task/{taskID}".replace("{indexName}",encodeURIComponent(e)).replace("{taskID}",encodeURIComponent(r)),queryParameters:{},headers:{}};return this.transporter.request(e,t)},getTopUserIds(e){return this.transporter.request({method:"GET",path:"/1/clusters/mapping/top",queryParameters:{},headers:{}},e)},getUserId({userID:e},r){if(!e)throw new Error("Parameter `userID` is required when calling `getUserId`.");e={method:"GET",path:"/1/clusters/mapping/{userID}".replace("{userID}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},hasPendingMappings({getClusters:e}={},r=void 0){let t={};void 0!==e&&(t.getClusters=e.toString());e={method:"GET",path:"/1/clusters/mapping/pending",queryParameters:t,headers:{}};return this.transporter.request(e,r)},listApiKeys(e){return this.transporter.request({method:"GET",path:"/1/keys",queryParameters:{},headers:{}},e)},listClusters(e){return this.transporter.request({method:"GET",path:"/1/clusters",queryParameters:{},headers:{}},e)},listIndices({page:e,hitsPerPage:r}={},t=void 0){let a={};void 0!==e&&(a.page=e.toString()),void 0!==r&&(a.hitsPerPage=r.toString());e={method:"GET",path:"/1/indexes",queryParameters:a,headers:{}};return this.transporter.request(e,t)},listUserIds({page:e,hitsPerPage:r}={},t=void 0){let a={};void 0!==e&&(a.page=e.toString()),void 0!==r&&(a.hitsPerPage=r.toString());e={method:"GET",path:"/1/clusters/mapping",queryParameters:a,headers:{}};return this.transporter.request(e,t)},multipleBatch(e,r){if(!e)throw new Error("Parameter `batchParams` is required when calling `multipleBatch`.");if(e.requests)return this.transporter.request({method:"POST",path:"/1/indexes/*/batch",queryParameters:{},headers:{},data:e},r);throw new Error("Parameter `batchParams.requests` is required when calling `multipleBatch`.")},operationIndex({indexName:e,operationIndexParams:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `operationIndex`.");if(!r)throw new Error("Parameter `operationIndexParams` is required when calling `operationIndex`.");if(!r.operation)throw new Error("Parameter `operationIndexParams.operation` is required when calling `operationIndex`.");if(!r.destination)throw new Error("Parameter `operationIndexParams.destination` is required when calling `operationIndex`.");e={method:"POST",path:"/1/indexes/{indexName}/operation".replace("{indexName}",encodeURIComponent(e)),queryParameters:{},headers:{},data:r};return this.transporter.request(e,t)},partialUpdateObject({indexName:e,objectID:r,attributesToUpdate:t,createIfNotExists:a},s){if(!e)throw new Error("Parameter `indexName` is required when calling `partialUpdateObject`.");if(!r)throw new Error("Parameter `objectID` is required when calling `partialUpdateObject`.");if(!t)throw new Error("Parameter `attributesToUpdate` is required when calling `partialUpdateObject`.");let i="/1/indexes/{indexName}/{objectID}/partial".replace("{indexName}",encodeURIComponent(e)).replace("{objectID}",encodeURIComponent(r)),n={};void 0!==a&&(n.createIfNotExists=a.toString());e={method:"POST",path:i,queryParameters:n,headers:{},data:t};return this.transporter.request(e,s)},removeUserId({userID:e},r){if(!e)throw new Error("Parameter `userID` is required when calling `removeUserId`.");e={method:"DELETE",path:"/1/clusters/mapping/{userID}".replace("{userID}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},replaceSources({source:e},r){if(e)return this.transporter.request({method:"PUT",path:"/1/security/sources",queryParameters:{},headers:{},data:e},r);throw new Error("Parameter `source` is required when calling `replaceSources`.")},restoreApiKey({key:e},r){if(!e)throw new Error("Parameter `key` is required when calling `restoreApiKey`.");e={method:"POST",path:"/1/keys/{key}/restore".replace("{key}",encodeURIComponent(e)),queryParameters:{},headers:{}};return this.transporter.request(e,r)},saveObject({indexName:e,body:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `saveObject`.");if(!r)throw new Error("Parameter `body` is required when calling `saveObject`.");e={method:"POST",path:"/1/indexes/{indexName}".replace("{indexName}",encodeURIComponent(e)),queryParameters:{},headers:{},data:r};return this.transporter.request(e,t)},saveRule({indexName:e,objectID:r,rule:t,forwardToReplicas:a},s){if(!e)throw new Error("Parameter `indexName` is required when calling `saveRule`.");if(!r)throw new Error("Parameter `objectID` is required when calling `saveRule`.");if(!t)throw new Error("Parameter `rule` is required when calling `saveRule`.");if(!t.objectID)throw new Error("Parameter `rule.objectID` is required when calling `saveRule`.");let i="/1/indexes/{indexName}/rules/{objectID}".replace("{indexName}",encodeURIComponent(e)).replace("{objectID}",encodeURIComponent(r)),n={};void 0!==a&&(n.forwardToReplicas=a.toString());e={method:"PUT",path:i,queryParameters:n,headers:{},data:t};return this.transporter.request(e,s)},saveRules({indexName:e,rules:r,forwardToReplicas:t,clearExistingRules:a},s){if(!e)throw new Error("Parameter `indexName` is required when calling `saveRules`.");if(!r)throw new Error("Parameter `rules` is required when calling `saveRules`.");let i="/1/indexes/{indexName}/rules/batch".replace("{indexName}",encodeURIComponent(e)),n={};void 0!==t&&(n.forwardToReplicas=t.toString()),void 0!==a&&(n.clearExistingRules=a.toString());e={method:"POST",path:i,queryParameters:n,headers:{},data:r};return this.transporter.request(e,s)},saveSynonym({indexName:e,objectID:r,synonymHit:t,forwardToReplicas:a},s){if(!e)throw new Error("Parameter `indexName` is required when calling `saveSynonym`.");if(!r)throw new Error("Parameter `objectID` is required when calling `saveSynonym`.");if(!t)throw new Error("Parameter `synonymHit` is required when calling `saveSynonym`.");if(!t.objectID)throw new Error("Parameter `synonymHit.objectID` is required when calling `saveSynonym`.");if(!t.type)throw new Error("Parameter `synonymHit.type` is required when calling `saveSynonym`.");let i="/1/indexes/{indexName}/synonyms/{objectID}".replace("{indexName}",encodeURIComponent(e)).replace("{objectID}",encodeURIComponent(r)),n={};void 0!==a&&(n.forwardToReplicas=a.toString());e={method:"PUT",path:i,queryParameters:n,headers:{},data:t};return this.transporter.request(e,s)},saveSynonyms({indexName:e,synonymHit:r,forwardToReplicas:t,replaceExistingSynonyms:a},s){if(!e)throw new Error("Parameter `indexName` is required when calling `saveSynonyms`.");if(!r)throw new Error("Parameter `synonymHit` is required when calling `saveSynonyms`.");let i="/1/indexes/{indexName}/synonyms/batch".replace("{indexName}",encodeURIComponent(e)),n={};void 0!==t&&(n.forwardToReplicas=t.toString()),void 0!==a&&(n.replaceExistingSynonyms=a.toString());e={method:"POST",path:i,queryParameters:n,headers:{},data:r};return this.transporter.request(e,s)},search(e,r){if(!(e=e&&Array.isArray(e)?{requests:e.map(({params:e,...r})=>"facet"===r.type?{...r,...e,type:"facet"}:{...r,...e,facet:void 0,maxFacetHits:void 0,facetQuery:void 0})}:e))throw new Error("Parameter `searchMethodParams` is required when calling `search`.");if(e.requests)return this.transporter.request({method:"POST",path:"/1/indexes/*/queries",queryParameters:{},headers:{},data:e,useReadTransporter:!0,cacheable:!0},r);throw new Error("Parameter `searchMethodParams.requests` is required when calling `search`.")},searchDictionaryEntries({dictionaryName:e,searchDictionaryEntriesParams:r},t){if(!e)throw new Error("Parameter `dictionaryName` is required when calling `searchDictionaryEntries`.");if(!r)throw new Error("Parameter `searchDictionaryEntriesParams` is required when calling `searchDictionaryEntries`.");if(!r.query)throw new Error("Parameter `searchDictionaryEntriesParams.query` is required when calling `searchDictionaryEntries`.");e={method:"POST",path:"/1/dictionaries/{dictionaryName}/search".replace("{dictionaryName}",encodeURIComponent(e)),queryParameters:{},headers:{},data:r,useReadTransporter:!0,cacheable:!0};return this.transporter.request(e,t)},searchForFacetValues({indexName:e,facetName:r,searchForFacetValuesRequest:t},a){if(!e)throw new Error("Parameter `indexName` is required when calling `searchForFacetValues`.");if(!r)throw new Error("Parameter `facetName` is required when calling `searchForFacetValues`.");e={method:"POST",path:"/1/indexes/{indexName}/facets/{facetName}/query".replace("{indexName}",encodeURIComponent(e)).replace("{facetName}",encodeURIComponent(r)),queryParameters:{},headers:{},data:t||{},useReadTransporter:!0,cacheable:!0};return this.transporter.request(e,a)},searchRules({indexName:e,searchRulesParams:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `searchRules`.");e={method:"POST",path:"/1/indexes/{indexName}/rules/search".replace("{indexName}",encodeURIComponent(e)),queryParameters:{},headers:{},data:r||{},useReadTransporter:!0,cacheable:!0};return this.transporter.request(e,t)},searchSingleIndex({indexName:e,searchParams:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `searchSingleIndex`.");e={method:"POST",path:"/1/indexes/{indexName}/query".replace("{indexName}",encodeURIComponent(e)),queryParameters:{},headers:{},data:r||{},useReadTransporter:!0,cacheable:!0};return this.transporter.request(e,t)},searchSynonyms({indexName:e,searchSynonymsParams:r},t){if(!e)throw new Error("Parameter `indexName` is required when calling `searchSynonyms`.");e={method:"POST",path:"/1/indexes/{indexName}/synonyms/search".replace("{indexName}",encodeURIComponent(e)),queryParameters:{},headers:{},data:r||{},useReadTransporter:!0,cacheable:!0};return this.transporter.request(e,t)},searchUserIds(e,r){if(!e)throw new Error("Parameter `searchUserIdsParams` is required when calling `searchUserIds`.");if(e.query)return this.transporter.request({method:"POST",path:"/1/clusters/mapping/search",queryParameters:{},headers:{},data:e,useReadTransporter:!0,cacheable:!0},r);throw new Error("Parameter `searchUserIdsParams.query` is required when calling `searchUserIds`.")},setDictionarySettings(e,r){if(!e)throw new Error("Parameter `dictionarySettingsParams` is required when calling `setDictionarySettings`.");if(e.disableStandardEntries)return this.transporter.request({method:"PUT",path:"/1/dictionaries/*/settings",queryParameters:{},headers:{},data:e},r);throw new Error("Parameter `dictionarySettingsParams.disableStandardEntries` is required when calling `setDictionarySettings`.")},setSettings({indexName:e,indexSettings:r,forwardToReplicas:t},a){if(!e)throw new Error("Parameter `indexName` is required when calling `setSettings`.");if(!r)throw new Error("Parameter `indexSettings` is required when calling `setSettings`.");let s="/1/indexes/{indexName}/settings".replace("{indexName}",encodeURIComponent(e)),i={};void 0!==t&&(i.forwardToReplicas=t.toString());e={method:"PUT",path:s,queryParameters:i,headers:{},data:r};return this.transporter.request(e,a)},updateApiKey({key:e,apiKey:r},t){if(!e)throw new Error("Parameter `key` is required when calling `updateApiKey`.");if(!r)throw new Error("Parameter `apiKey` is required when calling `updateApiKey`.");if(!r.acl)throw new Error("Parameter `apiKey.acl` is required when calling `updateApiKey`.");e={method:"PUT",path:"/1/keys/{key}".replace("{key}",encodeURIComponent(e)),queryParameters:{},headers:{},data:r};return this.transporter.request(e,t)}}}function U(e,r,t){if(!e||"string"!=typeof e)throw new Error("`appId` is missing.");if(r&&"string"==typeof r)return C({appId:e,apiKey:r,timeouts:{connect:p,read:g,write:w},requester:P(),algoliaAgents:[{segment:"Browser"}],authMode:"WithinQueryParameters",responsesCache:c(),requestsCache:c({serializable:!1}),hostsCache:l({caches:[h({key:A+"-"+e}),c()]}),...t});throw new Error("`apiKey` is missing.")}var k="5.3.0";function O({appId:e,apiKey:r,authMode:t,algoliaAgents:a,...s}){let i=o(e,r,t);return{transporter:u({hosts:[{url:e+"-dsn.algolia.net",accept:"read",protocol:"https"},{url:e+".algolia.net",accept:"write",protocol:"https"}].concat(n([{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"}])),...s,algoliaAgent:m({algoliaAgents:a,client:"Recommend",version:k}),baseHeaders:{"content-type":"text/plain",...i.headers(),...s.baseHeaders},baseQueryParameters:{...i.queryParameters(),...s.baseQueryParameters}}),appId:e,clearCache(){return Promise.all([this.transporter.requestsCache.clear(),this.transporter.responsesCache.clear()]).then(()=>{})},get _ua(){return this.transporter.algoliaAgent.value},addAlgoliaAgent(e,r){this.transporter.algoliaAgent.add({segment:e,version:r})},setClientApiKey({apiKey:e}){this.transporter.baseHeaders["x-algolia-api-key"]=e},customDelete({path:e,parameters:r},t){if(!e)throw new Error("Parameter `path` is required when calling `customDelete`.");e={method:"DELETE",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{}};return this.transporter.request(e,t)},customGet({path:e,parameters:r},t){if(!e)throw new Error("Parameter `path` is required when calling `customGet`.");e={method:"GET",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{}};return this.transporter.request(e,t)},customPost({path:e,parameters:r,body:t},a){if(!e)throw new Error("Parameter `path` is required when calling `customPost`.");e={method:"POST",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{},data:t||{}};return this.transporter.request(e,a)},customPut({path:e,parameters:r,body:t},a){if(!e)throw new Error("Parameter `path` is required when calling `customPut`.");e={method:"PUT",path:"/{path}".replace("{path}",e),queryParameters:r||{},headers:{},data:t||{}};return this.transporter.request(e,a)},deleteRecommendRule({indexName:e,model:r,objectID:t},a){if(!e)throw new Error("Parameter `indexName` is required when calling `deleteRecommendRule`.");if(!r)throw new Error("Parameter `model` is required when calling `deleteRecommendRule`.");if(!t)throw new Error("Parameter `objectID` is required when calling `deleteRecommendRule`.");e={method:"DELETE",path:"/1/indexes/{indexName}/{model}/recommend/rules/{objectID}".replace("{indexName}",encodeURIComponent(e)).replace("{model}",encodeURIComponent(r)).replace("{objectID}",encodeURIComponent(t)),queryParameters:{},headers:{}};return this.transporter.request(e,a)},getRecommendRule({indexName:e,model:r,objectID:t},a){if(!e)throw new Error("Parameter `indexName` is required when calling `getRecommendRule`.");if(!r)throw new Error("Parameter `model` is required when calling `getRecommendRule`.");if(!t)throw new Error("Parameter `objectID` is required when calling `getRecommendRule`.");e={method:"GET",path:"/1/indexes/{indexName}/{model}/recommend/rules/{objectID}".replace("{indexName}",encodeURIComponent(e)).replace("{model}",encodeURIComponent(r)).replace("{objectID}",encodeURIComponent(t)),queryParameters:{},headers:{}};return this.transporter.request(e,a)},getRecommendStatus({indexName:e,model:r,taskID:t},a){if(!e)throw new Error("Parameter `indexName` is required when calling `getRecommendStatus`.");if(!r)throw new Error("Parameter `model` is required when calling `getRecommendStatus`.");if(!t)throw new Error("Parameter `taskID` is required when calling `getRecommendStatus`.");e={method:"GET",path:"/1/indexes/{indexName}/{model}/task/{taskID}".replace("{indexName}",encodeURIComponent(e)).replace("{model}",encodeURIComponent(r)).replace("{taskID}",encodeURIComponent(t)),queryParameters:{},headers:{}};return this.transporter.request(e,a)},getRecommendations(e,r){if(!(e=e&&Array.isArray(e)?{requests:e}:e))throw new Error("Parameter `getRecommendationsParams` is required when calling `getRecommendations`.");if(e.requests)return this.transporter.request({method:"POST",path:"/1/indexes/*/recommendations",queryParameters:{},headers:{},data:e,useReadTransporter:!0,cacheable:!0},r);throw new Error("Parameter `getRecommendationsParams.requests` is required when calling `getRecommendations`.")},searchRecommendRules({indexName:e,model:r,searchRecommendRulesParams:t},a){if(!e)throw new Error("Parameter `indexName` is required when calling `searchRecommendRules`.");if(!r)throw new Error("Parameter `model` is required when calling `searchRecommendRules`.");e={method:"POST",path:"/1/indexes/{indexName}/{model}/recommend/rules/search".replace("{indexName}",encodeURIComponent(e)).replace("{model}",encodeURIComponent(r)),queryParameters:{},headers:{},data:t||{},useReadTransporter:!0,cacheable:!0};return this.transporter.request(e,a)}}}function j(e,r,t){if(!e||"string"!=typeof e)throw new Error("`appId` is missing.");if(r&&"string"==typeof r)return O({appId:e,apiKey:r,timeouts:{connect:p,read:g,write:w},requester:P(),algoliaAgents:[{segment:"Browser"}],authMode:"WithinQueryParameters",responsesCache:c(),requestsCache:c({serializable:!1}),hostsCache:l({caches:[h({key:k+"-"+e}),c()]}),...t});throw new Error("`apiKey` is missing.")}e.abtestingClient=a,e.algoliasearch=function(r,t,e){if(!r||"string"!=typeof r)throw new Error("`appId` is missing.");if(t&&"string"==typeof t)return{...U(r,t,e),get _ua(){return this.transporter.algoliaAgent.value},initRecommend:(e={})=>j(e.appId||r,e.apiKey||t,e.options),initAnalytics:(e={})=>s(e.appId||r,e.apiKey||t,e.region,e.options),initAbtesting:(e={})=>a(e.appId||r,e.apiKey||t,e.region,e.options),initPersonalization:e=>i(e.appId||r,e.apiKey||t,e.region,e.options)};throw new Error("`apiKey` is missing.")},e.analyticsClient=s,e.apiClientVersion=A,e.personalizationClient=i,e.recommendClient=j,e.searchClient=U});
\ No newline at end of file
diff --git a/resources/algoliasearch/5.3.0/note b/resources/algoliasearch/5.3.0/note
new file mode 100644
index 00000000..5fdcdec8
--- /dev/null
+++ b/resources/algoliasearch/5.3.0/note
@@ -0,0 +1,4 @@
+In this directory the file was renamed.
+
+Original: algoliasearch.umd.min.js
+Now: algoliasearch.min.js